Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.node
1.解题思路code
这题是Merge Two Sorted Lists的拓展,咱们固然也能够利用两两归并来实现,但这里咱们采用PriorityQueue实现更简洁清晰。
最小堆,队列顶端的元素永远是最小的,那咱们把k个列表的第一个元素放入队列后,取出队列顶端的节点,就是须要找的最小的节点。
注意点:
1)PriorityQueue不接受null值,add前须要判断;
2)取出队列顶端节点后,要将该节点的next节点放进队列中。
3)须要实现一个Comparator<ListNode>队列
2.代码it
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; } }