合并两个有序链表-JS版本

313 阅读1分钟

题目:

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

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路:

  1. 类似归并排序中的合并过程
  2. 创建一个新链表
  3. head 存储所有合并数据
  4. cur作为一个tmp存储,分析cur=head的作用
const a = {val: 1};
let t = a;
t.next = {val: 2};
t = t.next;
t.next = {val: 3};
// 结果
a = {
    val: 1,
    next: {
        val: 2,
        next: {
            val: 3
        }
    }
}
// 结论:
cur一直在给head作累加
  1. 比较l1,l2的val大小
  2. cur.next = l1 -> 移动当前cur.next
  3. cur = cur.next -> 下移动cur
  4. l1 = l1.next -> 移动l1

代码

function ListNode(val) {
        this.val = val;
        this.next = null;
}
 var mergeTwoLists = function (l1, l2) {
    const head = new ListNode(0);
    let cur = head;
    while (l1 !== null && l2 !== null) {
        if (l1.val < l2.val) {
            cur.next = l1;
            cur = cur.next;
            l1 = l1.next;
        } else {
            cur.next = l2;
            cur = cur.next;
            l2 = l2.next;
        }
    }
    if (l1 === null) {
        cur.next = l2;
    } else {
        cur.next = l1;
    }
    // 去表头
    return head.next;

};