Q23: Merge K Sorted Lists
Merge $k$ sorted linked lists into one consolidated sorted list using Divide and Conquer or Min-Heap.
Divide and Conquer List Merger
function mergeKLists(lists) {
if (!lists || lists.length === 0) return null;
while (lists.length > 1) {
const mergedLists = [];
for (let i = 0; i < lists.length; i += 2) {
const l1 = lists[i];
const l2 = i + 1 < lists.length ? lists[i + 1] : null;
mergedLists.push(mergeTwoLists(l1, l2));
}
lists = mergedLists;
}
return lists[0];
}
function mergeTwoLists(l1, l2) {
const dummy = { val: 0, next: null };
let tail = dummy;
while (l1 && l2) {
if (l1.val < l2.val) { tail.next = l1; l1 = l1.next; }
else { tail.next = l2; l2 = l2.next; }
tail = tail.next;
}
tail.next = l1 || l2;
return dummy.next;
}💡 Pairs up lists and merges each pair using mergeTwoLists, halving the total number of lists each pass until only one sorted list remains.
Key Takeaways
- Divide and conquer merges pairs of lists iteratively.
- Reduces time complexity to O(N log k) where N is total node count across k lists.
Knowledge Check
What is the time complexity of merging K sorted lists with total N nodes using Divide and Conquer?