Merge k Sorted Lists

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;
    }
}
相關文章
相關標籤/搜索