合并K个升序链表题解

题目链接
23. 合并 K 个升序链表 - 力扣(LeetCode)

题解:

  1. 首先特判------数组长度为0的 返回null ,长度为1的返回 lists0

  2. 对于这题,我们先首先记录,每个列表的第一个元素,维护这个数组,我们后续每次都从这个数组里面挑选最小值,来作为新链表的 下一个元素 ,如果当前下标的 数组被采用,则 往后走,链表往后走,无非就是先记录下一个的值,然后替换掉 我们维护的数组 当前位置的元素。

  3. 需要特别判断 数组元素为null的情况(其实也可以在 第一次就预处理了)

  4. 用一个循环来 不停找最小值,对于出现每一次null的情况,我们用count计数,出现一次null的情况,count--,代表这个链表已经走完,直到count为0,说明循环该结束了,返回答案即可

代码:

javascript 复制代码
// Definition for singly-linked list.
function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}

/**
 * @param {ListNode[]} lists
 * @return {ListNode}
 */
var mergeKLists = function (lists) {

    if (lists.length === 0) return null
    if (lists.length === 1) return lists[0]

    let res = null

    let curArr = [], count = lists.length, head = null
    // 头节点
    for (let i = 0; i < lists.length; i++) {
        curArr.push(lists[i])
    }

    function getMin(nodes) {
        let min = Number.MAX_SAFE_INTEGER, nodePos = 0
        for (let i = 0; i < nodes.length; i++) {
            // console.log(nodes[i].val)
            if (nodes[i] && min > nodes[i].val) {
                nodePos = i
                min = nodes[i].val
            }
        }
        return nodePos
    }

    while (count) {
        let pos = getMin(curArr)

        if (curArr[pos] === null) {
            count--
            continue
        }

        if (res === null) head = res = curArr[pos]
        else {
            res.next = curArr[pos]
            res = curArr[pos]
        }
        let t = res.next
        res.next = null
        if (t !== null) curArr[pos] = t
        else {
            count--
            curArr[pos] = null
        }
    }

    return head
};
相关推荐
deli00723 分钟前
32K 上下文塞满后,AI 最先忘掉什么?120 轮对话实测
前端
deli0071 小时前
手机拍灯为什么有一条条黑纹?PWM 240Hz 实测
前端
wangruofeng6 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng6 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈9 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技9 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户479492835691510 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马12 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng13 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding13 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js