《算法通关村——解析堆在合并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;
    }
}

画图理解:



相关推荐
码上一元1 分钟前
【百日算法计划】:每日一题,见证成长(026)
算法
愿天垂怜7 分钟前
【C++】C++11引入的新特性(1)
java·c语言·数据结构·c++·算法·rust·哈希算法
淡写青春20912 分钟前
计算机基础---进程间通信和线程间通信的方式
java·开发语言·数据结构
kitesxian17 分钟前
Leetcode200. 岛屿数量(HOT100)
算法·深度优先
特种加菲猫23 分钟前
初阶数据结构之栈的实现
开发语言·数据结构·笔记
LNTON羚通23 分钟前
算法定制LiteAIServer视频智能分析平台工业排污检测算法智控环保监管
算法·目标检测·音视频·监控·视频监控
好好学习O(∩_∩)O27 分钟前
11-23刷题记录
算法·leetcode·职场和发展
bingw01141 小时前
华为机试HJ62 查找输入整数二进制中1的个数
数据结构·算法·华为
苏言の狗1 小时前
小R的二叉树探险 | 模拟
c语言·数据结构·算法·宽度优先
jianqimingtian1 小时前
如何使用 Matlab 制作 GrabCAD 体素打印切片
数据结构·数据库