linqibin/leetcode

23. 合并K个排序链表

Opened this issue · 0 comments

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

思路:不知道这题到底想考什么。第一反应是用一个辅助数组把所有节点塞进去,排序,然后再构造链表。看评论说用递归来做堆排序,测试了还没有我思路快。
另附常见的排序算法js实现:https://www.jianshu.com/p/3e9d2297d7c2

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode[]} lists
 * @return {ListNode}
 */
function mergeKLists (lists) {
    

    if(lists.length == 0) return null;
    
    let arr = [];

    for (let node of lists) {
        while (node) {
            arr.push(node.val);
            node = node.next;
        }
    }
    
    if(arr.length == 0) return null;

    arr.sort(function(a, b){
        return Number(a) - Number(b);
    });

    arr[0] = { val: arr[0] };

    for (let i = 1; i < arr.length; i++) {
        arr[i] = { val: arr[i], next: null };
        arr[i - 1].next = arr[i];
    }

    return arr[0];
};