合并K个升序链表(题号23)

思路:使用优先级队列来处理,省去了自己比较节点大小的步骤

1.遍历lists,先将每个链表的头节点都放入优先级队列中,队列会自动比较大小

2.定义一个新的链表dummyNode

3.然后利用poll()方法获取到最小的节点minNode,加入到新链表的后面

4.如果minNode.next != null,再把minNode.next放到队列中

重复步骤三和步骤四,直到队列中没有任何元素。

java 复制代码
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        Queue<ListNode> queue = new PriorityQueue<>((v1, v2) -> v1.val - v2.val);
        for (ListNode node: lists) {
            if (node != null) {
                queue.offer(node);
            }
        }
        ListNode dummyHead = new ListNode(0);
        ListNode tail = dummyHead;
        while (!queue.isEmpty()) {
            ListNode minNode = queue.poll();
            tail.next = minNode;
            tail = minNode;
            if (minNode.next != null) {
                queue.offer(minNode.next);
            }
        }
        return dummyHead.next;
    }
}

时间复杂度:O(kn*log(k))

空间复杂度:O(k)

看到此处即是情,别忘记点个赞哦。如果有其他问题,欢迎评论,共同探讨!!!

相关推荐
Queenie_Charlie3 小时前
前缀和的前缀和
数据结构·c++·树状数组
念越7 小时前
数据结构:栈堆
java·开发语言·数据结构
dear_bi_MyOnly7 小时前
【多线程——线程状态与安全】
java·开发语言·数据结构·后端·中间件·java-ee·intellij-idea
浪客灿心8 小时前
list_stack_queue
数据结构·list
zh_xuan8 小时前
最小跳跃次数
数据结构·算法
zh_xuan8 小时前
单青蛙跳台阶
数据结构·算法
罗湖老棍子9 小时前
【 例 1】石子合并(信息学奥赛一本通- P1569)
数据结构·算法·区间dp·区间动态规划·分割合并
小高Baby@9 小时前
JSON、bind、form
数据结构·json
TracyCoder12311 小时前
LeetCode Hot100(21/100)——234. 回文链表
算法·leetcode·链表
数智工坊12 小时前
【数据结构-栈】3.1栈的顺序存储-链式存储
java·开发语言·数据结构