当前位置:   article > 正文

两个链表合并一个链表

链表合并
  1. class Solution {
  2. public:
  3. ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
  4. ListNode* p = list1;
  5. ListNode* q = list2;
  6. ListNode* ans = new ListNode(-1,list1!=NULL?list1:list2);
  7. ListNode* ansp = ans;
  8. while (p && q)
  9. {
  10. if (p->val >= q->val)
  11. {
  12. ans->next = q;
  13. ans = ans->next;
  14. q = q->next;
  15. }
  16. else {
  17. ans->next = p;
  18. ans = ans->next;
  19. p = p->next;
  20. }
  21. }
  22. if (p)
  23. {
  24. ans->next = p;
  25. }
  26. if (q)
  27. {
  28. ans->next = q;
  29. }
  30. return ansp->next;
  31. }
  32. }

其中包含一个名为 mergeTwoLists 的公共方法,用于合并两个已排序的链表。该方法接受两个参数 list1 和 list2,返回一个合并后的链表。

方法内部创建了两个指针 p 和 q,分别指向 list1 和 list2 的头节点。接着,创建一个新链表 ans,并将 ans 的头节点设为 -1,表示新链表中不包含头节点。同时,创建一个指针 ansp 指向 ans 的头节点,用于后续修改。

接下来,在 while 循环中,使用指针 p 和 q 遍历两个链表。如果当前节点的值大于等于另一个节点的值,则将当前节点的下一个节点设为另一个节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。如果当前节点的值小于另一个节点的值,则将当前节点的下一个节点设为当前节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。最后,当其中一个链表遍历完毕时,需要将 ansp 的指针指向其最后一个节点,表示新链表中不包含两个链表的尾节点,只包含剩余节点。

最后,方法返回 ansp 的指针 next,表示合并后的链表的头节点。如果 list1 或 list2 为空,则 next 指向 ans 的头节点。

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

闽ICP备14008679号