23. 合并K个排序链表
Opened this issue · 0 comments
linqibin commented
合并 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];
};