用一个堆来对所有k个链表的第一个排序,然后poll出最小的一个,然后将它的下一个加入堆中。
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null || lists.length==0){
return null;
}
PriorityQueue<ListNode> pq=new PriorityQueue<ListNode>(new Comparator<ListNode>(){
public int compare(ListNode a,ListNode b){
return a.val-b.val;
}
});
for(int i=0;i<lists.length;i++){
if(lists[i]!=null){
pq.offer(lists[i]);
}
}
if(pq.isEmpty())return null;
ListNode root=new ListNode(-1);
ListNode cur=pq.poll();
if(cur.next!=null) pq.offer(cur.next);
root.next=cur;
while(!pq.isEmpty()){
cur.next=pq.poll();
cur=cur.next;
if(cur.next!=null) pq.offer(cur.next);
}
return root.next;
}
}