leetcode21-合并两个有序链表

leetcode 21
leetcode21-合并两个有序链表_第1张图片

思路:

  • 创建一个虚拟头节点,用一个指针 current 指向它

  • 每次比较 list1 和 list2 的头部,谁小就连接到 current.next

  • 然后更新current和list1 list2,每次设置了一个以后list要往后移动

  • 最后把 current.next 指向未处理完的链表部分即可

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

可以参考大佬视频:https://www.bilibili.com/video/BV17w4m1Y7CJ/?spm_id_from=333.337.search-card.all.click&vd_source=ccb42000243a376a86b435878466ec00

实现

var mergeTwoLists = function (list1, list2) {
    // 创建一个虚拟头节点
    let head = new Nodelist();
    let cur = head;
    while (list1 && list2) {
        if (list1.val <= list2.val) {
            cur.next = list1;
            list1 = list1.next;
        } else {
            cur.next = list2;
            list2 = list2.next;
        }
        cur = cur.next;
    }
    cur.next = list1 || list2;
    return head.next;
};

class Nodelist {
    constructor(val) {
        this.val = val;
        this.next = null;
    }
}

你可能感兴趣的:(leetcode热题100,算法小课堂,链表,数据结构,leetcode,算法)