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; } }