Leetcode刷题(第21题)——合并两个有序链表

x33g5p2x  于2022-02-28 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(269)

一、题目描述

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

二、示例

  1. 输入:l1 = [1,2,4], l2 = [1,3,4]
  2. 输出:[1,1,2,3,4,4]
  3. 示例2
  4. 输入:l1 = [], l2 = []
  5. 输出:[]
  6. 示例3
  7. 输入:l1 = [], l2 = [0]
  8. 输出:[0]

三、思路
本题可以分为以下几种情况。
1、当l1存在,l2不存在时,直接返回l1
2、当l1不存在,l2存在时,直接返回l2
3、当l1和l2都不存在时,直接返回l1
4、当两者都存在时,此时进行while遍历。

四、代码展示

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val, next) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.next = (next===undefined ? null : next)
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} list1
  10. * @param {ListNode} list2
  11. * @return {ListNode}
  12. */
  13. var mergeTwoLists = function(list1, list2) {
  14. if(list1 && !list2) return list1
  15. else if(!list1) return list2
  16. else {
  17. let p1 = list1
  18. let p2 = list2
  19. let head1 = new ListNode(0)
  20. let head2 = head1
  21. while(p1 && p2) {
  22. if(p1.val < p2.val) {
  23. head1.next = p1
  24. head1 = head1.next
  25. p1 = p1.next
  26. }else {
  27. head1.next = p2
  28. head1 = head1.next
  29. p2 = p2.next
  30. }
  31. }
  32. if(p1) head1.next = p1
  33. if(p2) head1.next = p2
  34. return head2.next
  35. }
  36. };

五、总结

时间复杂度为O(n),空间复杂度为O(1)。

相关文章