输出两个链表的共同元素,链表仍使用原来的La链表,为啥这个输入abc bcz 时只输出b啊

李我远点 2017-10-18 09:59:58
void MergeList_3(LinkList &La,LinkList &Lb)
{
LNode *pa,*pb,*p;
pa = La->next;
pb = Lb->next;
p = La;
p->next = NULL;
while(pa && pb)
{
if(pa->data == pb->data)
{
LNode *temp;
temp = pa;
temp->next = p->next;
p->next = temp;
pa = pa->next;
pb = pb->next;
}
else if(pa->data < pb->data)
{
pa = pa->next;
}
else
{
pb = pb->next;
}
}
while(pa) pa = pa->next;
while(pb) pb = pb->next;

}
...全文
118 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-10-19
  • 打赏
  • 举报
回复
void MergeList_3(LinkList &La,LinkList &Lb)
{
    LNode *pa,*pb,*p;
    pa = La->next;
    pb = Lb->next;
    p = La;
    p->next = NULL;
    while(pa && pb)
    {
        if(pa->data == pb->data)
        {
            LNode *temp;
            temp = pa;
            pa = pa->next;
            pb = pb->next;
            temp->next = p->next;
            p->next = temp;
        }
        else if(pa->data < pb->data)
        {
            pa = pa->next;
        }
        else
        {
            pb = pb->next;
        }
    }
}
可以参考一下上面的代码; 问题出在 if(pa->data == pb->data)判断条件体里。因为楼主的逻辑里,在将La链表里的数据放到新的链表里时,修改了原La的链表的下个节点。即当节点pa指向'b'时,pa->next就指向了NULL,所以La的'c'节点找不到了。 修改的办法如上,用temp指向要加到新的La的链表,然后让pa指向下一个节点,即‘c',最后再将temp链到新的La上。 最后的while(pa), while(pb)没有意义,建议删除。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧