当前位置:   article > 正文

双向链表的合并_双向链表合并

双向链表合并

A 和 b 是两双向链表。其中每一个结点存放一个整数。试编函数,将链表 b 和链表 a 合并,且去除 其中整数值相同的结点,返回合并后的链表首地址。

【做错过的点】

1.在“r = r->next;”后面还加了一句“p = p->next;”,这是致命错误,会导致结果不正确,因为与r比较的不再是第一个p了

2.冗余代码,如下写了两次p和r的赋值语句,可以归并写到一处的

  1. //先将A中p所指剩余结点插入新链表中
  2. while (p != NULL)
  3. {
  4. //用q指向p的下一个结点
  5. q = p->next;
  6. //将p与新链表A中的结点比较有无相同值
  7. while (r != NULL)
  8. {
  9. if (r->data == p->data)
  10. {
  11. //若相同则删除p所指结点,取链表中下一个值
  12. free(p);
  13. p = q;//冗余
  14. r = A;
  15. break;
  16. }
  17. r = r->next;
  18. }
  19. if (r == NULL)//若无相同值
  20. {
  21. //将p结点插入到新链表中
  22. p->next = A->next;
  23. p->prior = A;
  24. if (A->next != NULL)
  25. {
  26. A->next->prior = p;
  27. }
  28. A->next = p;
  29. p = q;//冗余
  30. r = A;
  31. }
  32. }

【个人理解】

既要把A中原来相同的元素去掉一个,还要在合并时,把与B相同的元素去掉其中一个,即重复元素中只保留一个元素

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/905258?site
推荐阅读
相关标签
  

闽ICP备14008679号