Merge k sorted linked lists into one sorted linked list?
ListNode MergeKLists(ListNode[] lists) {
if (lists == null || lists.Length == 0) return null;
PriorityQueue<ListNode, int> pq = new PriorityQueue<ListNode,
int>();
foreach (var list in lists)
if (list != null)
pq.Enqueue(list, list.val);
ListNode dummy = new ListNode(0);
ListNode current = dummy;
while (pq.Count > 0) {
var node = pq.Dequeue();
current.next = node;
current = current.next;
if (node.next != null)
pq.Enqueue(node.next, node.next.val);
return dummy.next;
Follow on:
Explanation:
Use a min-heap (priority queue) to always pick the smallest head node among k lists.