当前位置:   article > 正文

合并两个有序链表_struct listnode *mergetwolists1

struct listnode *mergetwolists1

题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/description/

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

 

 思路:把list1 和list2 放到一个新链表里面,其中head为头,tail为尾,是新链表的指针,每次取小的节点尾插到新链表。

  1. struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
  2. struct ListNode*head=NULL;
  3. struct ListNode *tail=NULL;
  4. //list1和list2为空时
  5. if(list1==NULL){
  6. return list2;
  7. }
  8. if(list2==NULL){
  9. return list1;
  10. }
  11. while(list1 && list2){
  12. if(list1->val<list2->val){
  13. if(tail==NULL){
  14. head =tail =list1;
  15. }
  16. else{
  17. tail->next=list1;
  18. tail=list1;
  19. }
  20. list1=list1->next;
  21. }
  22. else{
  23. if(tail==NULL){
  24. head =tail =list2;
  25. }
  26. else{
  27. tail->next=list2;
  28. tail=list2;
  29. }
  30. list2=list2->next;
  31. }
  32. }
  33. //list1先为空时
  34. if(list1){
  35. tail->next=list1;
  36. }
  37. //list2先为空时
  38. if(list2){
  39. tail->next=list2;
  40. }
  41. return head;
  42. }

还有可以用递归写

  1. struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
  2. {
  3. if(list1 == NULL)
  4. return list2;
  5. else if(list2 == NULL)
  6. return list1;
  7. else if(list1->val < list2->val)
  8. {
  9. list1->next = mergeTwoLists(list1->next, list2);
  10. return list1;
  11. }
  12. else
  13. {
  14. list2->next = mergeTwoLists(list1, list2->next);
  15. return list2;
  16. }
  17. }

但不推荐,容易栈溢出

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

闽ICP备14008679号