题目
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
思路
该问题其实是k路归并问题.
利用PriorityQueue的特性,首先把各个链表的头节点放入队列,每次从优先队列中取出最小根,再把其子节点放入队列
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null || lists.length==0) return null;
PriorityQueue<ListNode> queue = new PriorityQueue<ListNode>(lists.length,new Comparator<ListNode>(){
@Override
public int compare(ListNode o1, ListNode o2){
return o1.val - o2.val;
}
});
for(ListNode head : lists)
if(head != null)
queue.offer(head);
ListNode dummy = new ListNode(0), tail = dummy;
while(!queue.isEmpty()){
ListNode t = queue.poll();
tail.next = t;
tail = tail.next;
if(t.next != null) queue.offer(t.next);
}
return dummy.next;
}
}