题目描述

HOT100——合并两个有序列表(JS实现)_链表

解题思路

  • 首先我们要看清题干,本题给出的两个链表都是有序的,所以我们可以考虑双指针。
  • 使用一个指针指向了l1的头节点,使用另一个指针指向l2的头节点,比较大小谁小谁添加到新节点的下一个。
  • 当一个遍历完之后,结束循环,如果另一个有剩余则将其全部加到最新的链表末尾。

解题代码

var mergeTwoLists = function(l1, l2) {
    // 首先两个链表都是升序的,我们可以考虑双指针
    let left = l1;
    let right = l2;
    const node = new ListNode();
    let head = node;
    while (left && right) {
        if (left.val < right.val) {
            head.next = left;
            left = left.next; 
            head = head.next;
        } else {
            head.next = right;
            right = right.next;
            head = head.next;
        }
    }
    if (!left && right) {
        head.next = right;
    }
    if (!right && left) {
        head.next = left;
    }
    return node.next
};

启示

  • 学会使用双指针来对链表进行合并排序。