C语言链表删除节点代码求教

为什么下面那个IF语句不能删除?
void del(LinkList H)
{
int n=0;
char data[100];
printf("please input the char to delete:\n");
scanf("%s",data);
LinkList p,p1;
for(p=H;p!=NULL;p1=p,p=p->next)
{
while(strcmp(p->data,data)==0)
{
p1->next=p->next;
free(p);
p=p1->next;
if(p==NULL)break;
}
if(p==NULL) //为什么这个IF语句不能删除
break;
}
}

第1个回答  2011-10-22
因为当p为NULL时候,会再执行一次p1=p,p=p->next,而p->next这一句就会出现段错误。
第2个回答  2011-10-22
删除后 如果输入的字符是链表的最后一个 运行结果会可能出现 段错误
p=p->next 这句可能指向不明地址 段错误可能出现本回答被提问者采纳
相似回答