Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Use min heap for every list. O(k*lgn)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
// Start typing your Java solution below
// DO NOT write main() function
if(lists==null||lists.size()==0) return null;
Comparator<ListNode> comparator=new Comparator<ListNode>(){
public int compare(ListNode m, ListNode n){
if(m.val==n.val) return 0;
else if(m.val>n.val) return 1;
return -1;
}
};
PriorityQueue<ListNode> p=new PriorityQueue<ListNode>(lists.size(),comparator);
for(int i=0;i<lists.size();i++){
if(lists.get(i)!=null) p.add(lists.get(i));
}
ListNode head=null,c=null;
while(!p.isEmpty()){
if(head==null){
head=p.poll();
c=head;}
else{
c.next=p.poll();
c=c.next;
}
if(c.next!=null) p.add(c.next);
}
return head;
}
}