leetcode23-合并K个升序链表

leetcode 23
leetcode23-合并K个升序链表_第1张图片

思路

  • 遍历所有链表收集节点:将每个链表的节点断开其 next 指针后存入数组
  • 对数组进行排序:使用 JavaScript 的内置 sort 方法对节点数组按值排序
  • 重新连接排序后的节点:遍历排序后的数组,依次连接每个节点形成新链表

时间复杂度:O (n log n) 空间复杂度:O (n)

实现

var mergeKLists = function (lists) {
    const arr = [];
    for (let i = 0; i < lists.length; i++) {
        let cur = lists[i];
        while (cur) {
            const node = cur.next;
            cur.next = null;
            arr.push(cur);
            cur = node;
        }
    }
    if(!arr.length) return null;
    // 排序
    arr.sort((a, b) => a.val - b.val)
    let head = arr[0];
    let cur = head;
    for (let i = 1; i < arr.length; i++) {
        cur.next = arr[i]
        cur = cur.next;
    }
    return head;
};

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