合并K个升序链表题解

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

题解:

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

  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
};
相关推荐
小周码代码1 小时前
js 数字金额转为大写 js 金额转大写
开发语言·前端·javascript·js工具
航Hang*1 小时前
WEBSTORM前端——第1章:HTML——第2节:列表,表格,下拉菜单,文本框与按钮
前端·html·css3·webstorm
云计算DevOps-韩老师1 小时前
HTML盒子模型详解
前端·html
不一样的少年_1 小时前
不仅免费,还开源?这个 AI Mock 神器我必须曝光它
前端·javascript·浏览器
2501_931048081 小时前
HTML `<select>` 标签深度解析
前端·html
xcLeigh1 小时前
AI 绘制图表专栏:用豆包轻松实现 HTML 柱状图、折线图与饼图
前端·人工智能·html·折线图·柱状图·图表·豆包
码代码的霖1 小时前
HTML———标签元素
前端·html
鲸落✗1 小时前
深入解析单HTML实现的网页版《我的世界》(附代码下载链接)
前端·python·html
Aerelin1 小时前
豆瓣数据采集案例
前端·爬虫·python·js·playwright