合并k个已排序的链表

这道题要求合并 k 个已排序的链表为一个新的有序链表,用数组排序 + 重建链表
首先,遍历所有输入链表,将每个节点的数值收集到一个数组中。接着对数组进行排序,利用排序后的数组重新构建一个新的有序链表
以下是对应的代码解析:
class Solution {public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        vector<int> a; // 存储所有链表节点的数值
        // 遍历所有链表,收集节点值
        for (auto node : lists) {
            ListNode* p = node;
            while (p != NULL) {
                a.push_back(p->val);
                p = p->next;
            }
        }
        sort(a.begin(), a.end()); // 对数值进行排序
        ListNode dummy(0); // 虚拟头节点,简化链表构建
        ListNode* q = &dummy;
        // 用排序后的数值重建有序链表
        for (int val : a) {
            q->next = new ListNode(val);
            q = q->next;
        }
        return dummy.next; // 返回新链表的头节点
    }};

该解法的时间复杂度为O(NlogN),空间复杂度为O(N)。
全部评论

相关推荐

以前19年到20年还在鼓吹“宇宙机”这个概念,现在也没人提了,反而是多了一些劝退的声音。因为大家都在反复在积极叙事,我现在内卷学计算机,将来享福。可是这个故事是谁在传递,有思考过吗?别人说学计算机挣大钱,就一定能挣大钱吗?当有人说xx行业挣钱的时候,如果大部分认同,就说明已经开始走下坡路了。我学计算机的原因,就是看到同学都在学,进大厂,所以我也跟风,黑马也在叙事“月薪过w,就来黑马程序员”。我很清楚的记得“黑马发布的19年就业数据,是大多都20k往上,而现在最想公布的数据,没有一个20k,最高才15k,基本8k~到13k左右”。可见一般,计算机由于供需关系不平衡,市场也会调节的。能挣大钱,要么靠信息差,要么靠资源垄断,靠个人能力的例子少之又少。但是我这里并不是鼓吹大家选择一条奇奇怪怪的路,而是说要看清未来10年~20年的趋势,选择有价值的路。未来什么是注定的,比如说老龄化,或者Ai大模型能力,具身智能....比如说有人思考未来老龄化严重,是不是可以提前布局呢?据我了解,反而是哪些本来就没有经过内卷的人,而是思考现状和未来的人,走到我们前面。比如我最近也几家头部培训行业,再培训Ai训练师,也是0代码基础,培训去做Ai训练师,大专,28岁,包就业。这种现象不和当初一样吗?现在Ai是风口,也在大量招人,但往往学习路线不清晰,现在入局人少,才有机会。我认为是好事,你可以选择坚持,也可以选择去一些新的赛道,但值得肯定是“互联网”这艘大船不可能装下所有人的梦想,总有人在某个时间点退场,要么是毕业前,要么是毕业后工作两三年,五年到八年,能干上十年以上的人,少之又少,即便干了十几年的资深程序员,也会面临转型的问题,只是时间或早或晚而已。不管你是自愿还是非自愿,是一腔热血还是消极摆烂,也改变不了历史规律,即到了一定年龄,我们会面临转型问题,除了钱的积累,是否还有其他能力积累。只是希望到最后,希望有人能明白,提前意识到这个问题,早做打算。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务