纠结了我一天的问题 删除单链表结点的函数
/*删除函数*/struct message *del(struct message *head)
{
struct message *p1,*p2;
int m;
char name[30];
if(head==NULL)
{
printf("通讯录为空,删除失败!\n");
return(head);
}
p1=head;
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
printf("§ 请输入需要删除的姓名 §\n");
printf("∞∞∞∞∞∞∞∞∞∞∞∞∞∞\n");
m=0;
gets(name);
while(p1!=NULL)
{
while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->name,name)==0)
{
m++;
if(p1=head)
{
free(p1);
head=p1->next;
}
else
{
p2=head;
while(p2->next!=p1)
p2=p2->next;
if(p1->next=NULL)
{
free(p1);
p2->next=NULL;
}
else
{
free(p1);
p2->next=p1->next;
}
}
n=n-1;
printf("删除成功!\n");
}
p1=p1->next;
if(m==0)
{
printf("查无此人,删除失败!\n");
}
break;
}
return(head);
}
/*输出函数*/
void show(struct message *head)
{
struct message *p;
if(head!=NULL)
{
p=head;
printf("本通讯录现在共有%d人:\n",n);
printf("---姓名-------- msn---------手机--------Email--------通讯地址\n");
printf("==================================\n");
do
{
printf("== %s",p->name); printf(" ");
printf("%s",p->msn); printf(" ");
printf("%s",p->tel); printf(" ");
printf("%s",p->email); printf(" ");
printf("%s",p->address); printf(" \n");
p=p->next;
}while(p!=NULL);
printf("==================================\n");
}
else
printf("通讯录为空,无法输出!\n");
}
我在最后switch的一个case中这样调用它们
case '3':
{
head=del(head); /*删除*/
show(head);
}
break;
程序运行到这里没有反应 求解 应该怎么改 或者再帮我写一个删除结点的函数吧 明天就要交作业了 急死了