23. Merge k Sorted Lists
Description
You are given an array of k
linked-lists lists
, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Example 1:
Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explanation: The linked-lists are: [ 1->4->5, 1->3->4, 2->6 ] merging them into one sorted list: 1->1->2->3->4->4->5->6
Example 2:
Input: lists = [] Output: []
Example 3:
Input: lists = [[]] Output: []
Constraints:
k == lists.length
0 <= k <= 104
0 <= lists[i].length <= 500
-104 <= lists[i][j] <= 104
lists[i]
is sorted in ascending order.- The sum of
lists[i].length
will not exceed104
.
Solutions
Solution: Hash Map
- Time complexity: O(2n)
- Space complexity: O(n)
JavaScript
js
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
const mergeKLists = function (lists) {
const list = new ListNode();
const hashMap = new Map();
let current = list;
let maxVal = 0;
let minVal = Number.MAX_SAFE_INTEGER;
for (let node of lists) {
while (node) {
const { val, next } = node;
const count = hashMap.get(val) ?? 0;
hashMap.set(val, count + 1);
node = next;
maxVal = Math.max(val, maxVal);
minVal = Math.min(val, minVal);
}
}
for (let val = minVal; val <= maxVal; val++) {
if (!hashMap.has(val)) continue;
let count = hashMap.get(val);
while (count--) {
current.next = new ListNode(val);
current = current.next;
}
}
return list.next;
};