leetcode 23.合并K个排序链表

巧了我就是萌 提交于 2019-12-02 11:54:01

题目:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方案,需要对每个数据进行排序,我们选择构建一个最小堆,将每个元素放入堆中,然后创建一个新的链表,将堆顶元素依次取出,并添加到链表中。

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        int len = 0;
        if((len=lists.length)==0 || lists == null) return null;
        ListNode preHead = new ListNode(-1);
        ListNode preNode = preHead;
        PriorityQueue<ListNode> queue = new PriorityQueue<>(len, new Comparator<ListNode>() {
            @Override
            public int compare(ListNode o1, ListNode o2) {
                return o1.val - o2.val;
            }
        });
        for (ListNode node : lists) {
            if(node!=null) queue.add(node);
        }
        while(!queue.isEmpty()){
            ListNode small = queue.poll();
            preNode.next = small;
            if(small.next!=null) queue.add(small.next); //将最小值节点后面的节点添加到队里中
            preNode = preNode.next;
        }
        return preHead.next;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!