《算法通关村——解析堆在合并K个排序链表的应用》

《算法通关村------解析堆在合并K个排序链表的应用》

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

复制代码
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

复制代码
输入:lists = []
输出:[]

示例 3:

复制代码
输入:lists = [[]]
输出:[]

这里直接给代码,我们来理解

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null || lists.length == 0){
            return null;
        }
        PriorityQueue<ListNode> q = new PriorityQueue<>(Comparator.comparing(node -> node.val));
        /*
        理解下面这个循环,只是把每个链表的第一个数放入最小堆中。
        */
        for(int i = 0;i< lists.length;i++){
            if(lists[i] != null){
                q.add(lists[i]);
            }
        }
        /*
        理解下面这个循环,首先就是把上面的每个链表的第一个元素进行了一个排序,然后把那个最小的元素的链表拿出来,把它放入我们定义的新的链表的下一个节点,判断他是否有下一个节点,如果有下一个节点,那么就把他放入最小堆里面去(此时堆会重新排序),然后再进行下一次循环,从最小堆中取元素。其实理解这里最重要就是要知道链表初始就是排好序的。
        */

        ListNode dummy = new ListNode(0);
        ListNode tail = dummy;
        while(!q.isEmpty()){
            tail.next = q.poll();
            tail = tail.next;
            if(tail.next != null){
                q.add(tail.next);
            }
        }
        return dummy.next;
    }
}

画图理解:



相关推荐
2401_872945092 分钟前
【补题】Codeforces Round 735 (Div. 2) C. Mikasa
算法
叫我:松哥4 分钟前
基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
人工智能·爬虫·python·算法·django·数据可视化·朴素贝叶斯
Star在努力11 分钟前
14-C语言:第14天笔记
c语言·笔记·算法
赴3352 小时前
Numpy 库 矩阵数学运算,点积,文件读取和保存等
人工智能·算法·numpy·random·dot
自由随风飘2 小时前
机器学习-SVM支持向量机
算法·机器学习·支持向量机
屁股割了还要学3 小时前
【C语言进阶】柔性数组
c语言·开发语言·数据结构·c++·学习·算法·柔性数组
草莓熊Lotso3 小时前
【LeetCode刷题指南】--有效的括号
c语言·数据结构·其他·算法·leetcode·刷题
Alla T4 小时前
【通识】算法案例
算法
Electrolux4 小时前
你敢信,不会点算法没准你赛尔号都玩不明白
前端·后端·算法
天天开心(∩_∩)4 小时前
代码随想录算法训练营第三十一天
算法