解题步骤

  1. 新建一个新链表,作为返回结果
  2. 用指针遍历两个有序链表,并比较两个链表的当前节点,较小者先接入新链表,并将指针后移一步
  3. 链表遍历结束,返回新链表

通过链表的方式实现

  • 时间复杂度:O (m + n)
  • 空间复杂度:O (1)

    1. function mergeTwoLists(list1, list2) {
    2. const res = new ListNode(0);
    3. let p = res;
    4. let p1 = list1;
    5. let p2 = list2;
    6. while (p1 && p2) {
    7. if (p1.val < p2.val) {
    8. p.next = p1;
    9. p1 = p1.next;
    10. } else {
    11. p.next = p2;
    12. p2 = p2.next;
    13. }
    14. p = p.next;
    15. }
    16. if (p1) {
    17. p.next = p1;
    18. }
    19. if (p2) {
    20. p.next = p2;
    21. }
    22. return res.next;
    23. }

代码中主要遍历了 list1list2 ,所以时间复杂度是 O (m + n),而空间复杂度是 O (1),因为我们新建的变量都是一些指针,不是数组也不是矩阵,所以是不会随着数据增大而增大。