LeetCode – Merge k Sorted Lists (Java)
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Analysis
The simplest solution is using PriorityQueue. The elements of the priority queue are ordered according to their natural ordering, or by a comparator provided at the construction time (in this case).
Java Solution
public ListNode mergeKLists(ListNode[] lists) { if(lists==nulllists.length==0) return null; PriorityQueue<ListNode> queue = new PriorityQueue<ListNode>(new Comparator<ListNode>(){ public int compare(ListNode l1, ListNode l2){ return l1.val  l2.val; } }); ListNode head = new ListNode(0); ListNode p = head; for(ListNode list: lists){ if(list!=null) queue.offer(list); } while(!queue.isEmpty()){ ListNode n = queue.poll(); p.next = n; p=p.next; if(n.next!=null) queue.offer(n.next); } return head.next; } 
Time: log(k) * n.
k
is number of list and n
is number of total elements.
In addition, from Java 8 comparator definition can be simplified as the following:
Comparator<ListNode> comp = Comparator.comparing(ListNode>ListNode.val); PriorityQueue<ListNode> queue = new PriorityQueue<>(comp); 
<pre><code> String foo = "bar"; </code></pre>

nebula

Neel

Yanfei

Pallavi

Guest

Meeeeee

Guest

IsAlright