合并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
};
相关推荐
BK贝壳1 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
itmigrate5 小时前
前端项目里,Object.is 并不是 === 的平替
前端
小大宇7 小时前
Vue知识点6-computed计算属性
前端·javascript·vue.js
程序员海军7 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_949970697 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
风骏时光牛马9 小时前
后端服务接口开发与性能优化
前端
kyriewen9 小时前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师9 小时前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端
IT_陈寒10 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
柳杉10 小时前
用 Codex 完成智慧高速 3D 可视化大屏,从 18 张行业设计稿到可交互的运行监测中心
前端·ai编程·数据可视化