23. Merge k Sorted Lists(heap)

来源:互联网 发布:极限挑战 感情 知乎 编辑:程序博客网 时间:2024/06/05 07:22

题目:

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

合并k个有序链表

创建一个大小为K的堆,每次取出对顶元素,然后添加堆顶元素在原链表的下一个元素。最后取出的元素形成的链表就是有序链表

    public ListNode mergeKLists(ListNode[] lists) {        ListNode head = null;        PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(10,new Comparator<ListNode>() {@Overridepublic int compare(ListNode o1, ListNode o2) {// TODO Auto-generated method stubreturn o1.val - o2.val;}});                for(int i=0;i<lists.length;i++)        {        if(lists[i]!=null)        heap.offer(lists[i]);        }        ListNode pre = head;        while(heap.size()>0)        {        ListNode temp = heap.poll();        if(head == null)        {        head = temp;        }        else        {        pre.next = temp;        }        pre = temp;        if(temp.next!=null){        heap.offer(temp.next);        }                }        return head;    }


0 0