合并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)

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

相关推荐
Aurorar0rua19 小时前
C Primer Plus 14.17 复习题
c语言·开发语言·数据结构
吃着火锅x唱着歌19 小时前
LeetCode 2909.元素和最小的山形三元组II
数据结构·算法·leetcode
脏脏a19 小时前
栈 & 队列:面试题(括号 / 循环队列)+ 概念题,全考点覆盖
数据结构·栈和队列面试题
EXtreme3520 小时前
算法深潜:链表中的生死之环(LeetCode 141 & 142 详解)
数据结构·算法·leetcode·链表·快慢指针·数学证明·带环链表
seven97_top20 小时前
数据结构——树
java·数据结构
leoufung20 小时前
LeetCode 211:设计添加与搜索单词的数据结构(Trie + DFS)
数据结构·leetcode·深度优先
FuckPatience20 小时前
C# BinarySearch 的返回值
开发语言·数据结构·c#
代码雕刻家20 小时前
1.8.课设实验-数据结构-哈夫曼树的建立与应用
c语言·数据结构
无限进步_21 小时前
寻找数组中缺失数字:多种算法详解与比较
c语言·开发语言·数据结构·算法·排序算法·visual studio
xu_yule21 小时前
数据结构(4)链表概念+单链表实现
数据结构·算法·链表