链表删除结点函数出了问题 大家帮我看看好吗
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(head=p1)
{
head=p1->next;
free(p1);
}
else
{
if(p1->next=NULL)
{
p2->next=NULL;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
}
n=n-1;
printf("删除成功!\n");
}
p1=p1->next;
if(m==0)
{
printf("查无此人,删除失败!\n");
}
break;
}
return(head);
}
这个函数运行出来是如果删除第二个 那么前两个都删除了 求高手指出错误