C语言重构【21】合并两个有序链表

我就是我 2023-02-13 08:59 76阅读 0赞

文章目录

        • 传送门
        • 题目
        • 方案:单链表练习
          • 复杂度计算

传送门

  • Java版

题目

  1. 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  2. 示例:
  3. 输入:1->2->4, 1->3->4
  4. 输出:1->1->2->3->4->4

方案:单链表练习

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
  9. if(l1==NULL) return l2;
  10. else if(l2==NULL) return l1;
  11. struct ListNode* p;
  12. struct ListNode* head;
  13. if(l1->val<=l2->val){
  14. head = l1;
  15. l1 = l1->next;
  16. } else{
  17. head = l2;
  18. l2 = l2->next;
  19. }
  20. p = head;
  21. while(l1!=NULL||l2!=NULL){
  22. if(l1==NULL) {
  23. p->next = l2;
  24. return head;
  25. }else if(l2 == NULL){
  26. p->next = l1;
  27. return head;
  28. }else{
  29. //二者都不为空
  30. if(l1->val<=l2->val){
  31. p->next = l1;
  32. l1 = l1->next;
  33. p = p->next;
  34. } else{
  35. p->next = l2;
  36. l2 = l2->next;
  37. p = p ->next;
  38. }
  39. }
  40. }
  41. return head;
  42. }
复杂度计算
  • 时间复杂度:O(m+n)
  • 空间复杂度:O(1)

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读