C语言删除两条单链表相同的元素?

List*List_Delete(List*head1,List*head2){List*p,*q,*s;p=head1;while(p->next!=NULL){q=h... List *List_Delete(List *head1,List *head2)
{
List *p,*q,*s;
p=head1;
while(p->next!=NULL){
q=head2;
while(q!=NULL){
if(p->data==q->data)
if(q==head2)
head2=q->next;
else{
s=q->next;
q->next=s->next;
free(s);
}
q=q->next;
}
p=p->next;
}
p->next=head2;
return head1;
}
外层循环为什么不能是while(p!=NULL)呢????这样的话只能遍历到第一个链表的倒数第二个元素
展开
 我来答
大反派小花6Q
2020-04-21 · TA获得超过139个赞
知道小有建树答主
回答量:208
采纳率:75%
帮助的人:42.8万
展开全部
p!=NULL这个判断p指针是否为空的语句是必须的,但是该函数中并没有p!=NULL的判断,因为p为空的话那么程序就无法从内存中取出p->next,所以如果参数head1为空的话,程序会强制中断并报错。并且外循环的末尾p=p->next正好能和while(p!=NULL)对应,因此我个人认为外层循环可以是while(p!=NULL)。
追问
我也是这么认为的,可是运行的时候会出错。。。很迷茫。。。
追答
是因为函数的末尾部分有p->next=head2;吧,如果写while(p!=NULL)的话,那么当p==NULL的时候循环才会终止,此时p==NULL自然就不存在p->next了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式