Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
1.解题思路
这题是Merge Two Sorted Lists的拓展,我们当然也可以利用两两归并来实现,但这里我们采用PriorityQueue实现更简洁清晰。
最小堆,队列顶端的元素永远是最小的,那我们把k个列表的第一个元素放入队列后,取出队列顶端的节点,就是需要找的最小的节点。
注意点:
1)PriorityQueue不接受null值,add前需要判断;
2)取出队列顶端节点后,要将该节点的next节点放进队列中。
3)需要实现一个Comparator<ListNode>
2.代码
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length==0) return null;
//min heap
PriorityQueue<ListNode> pq=new PriorityQueue<ListNode>(11,new Comparator<ListNode>(){
public int compare(ListNode l1,ListNode l2){
return l1.val-l2.val;
}
} );
ListNode dummy=new ListNode(0);
for(int i=0;i<lists.length;i++){
if(lists[i]!=null)
pq.add(lists[i]);
}
ListNode node=dummy;
while(pq.peek()!=null){
node.next=pq.poll();
node=node.next;
if(node.next!=null)
pq.add(node.next);
}
return dummy.next;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。