news 2026/6/23 20:16:42

leetcode 23. 合并 K 个升序链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 23. 合并 K 个升序链表

思路:采用了暴力破解法

1.值收集:遍历 K 个链表的所有节点,将节点值存入数组,把 “链表的有序合并” 转化为 “数组的排序”;
2.数组排序:利用系统排序函数对存储节点值的数组进行升序排序,得到全局有序的数值序列;
3.链表重建:以排序后的数组为基础,逐个创建链表节点并拼接,生成最终的升序链表。

创建一个整型数组,用于存放 链表中所有节点的数值。

链表的优势是 “动态插入删除”,但此处我们需要全局排序,数组的随机访问和排序操作更高效、更易实现。

外层循环:遍历输入的 lists 数组(lists 中每个元素是一个链表的头指针),head 代表当前遍历到的链表的头节点。逐个处理 K 个链表,确保没有遗漏任何一个链表。

内层循环:定义指针,初始指向当前链表的头节点,用于遍历该链表的所有节点。
循环条件 : 只要指针不指向空(即未到链表末尾),就继续遍历,将当前节点的数值 val 存入数组。然后指针向后移动一位,指向链表的下一个节点,直到遍历到链表末尾。

排序。

然后定义虚拟头节点,避免处理空链表的特殊情况,同时无需单独处理第一个节点的头指针赋值 问题,所有新节点都可以统一拼接到 dummy 之后

定义指针 p,初始指向虚拟头节点 dummy,作为移动指针,负责逐个拼接新创建的链表节点,避免频繁修改头指针。

最后返回dummy.next,因为dummy是虚拟头节点,他的后一个才是真正的头节点

时间复杂度:O(NlogN)
遍历所有节点收集值:O(N)(N 为所有节点的总数,每个节点仅访问一次);
数组排序:O(NlogN)(sort 函数的时间复杂度);
重建链表:O(N)(每个数值仅创建一次节点);
总复杂度由最高项决定,即 O(NlogN)。

class Solution {

public:

ListNode* mergeKLists(vector<ListNode*>& lists) {//用listnode表示链表时,ListNode * 默认代表链表头

vector<int> a;

for(ListNode* head:lists){//外层循环遍历lists数组中每个链表的头指针

ListNode* p=head;

while(p!=nullptr){//内层循环遍历当前链表的每个节点,到链表末尾

a.push_back(p->val);

p=p->next;

}

}

sort(a.begin(),a.end());

ListNode dummy(0);//创建一个虚拟头节点

ListNode* q=&dummy;

for(int b:a){

q->next=new ListNode(b); //用当前数值创建新节点,接在q指针之后

q=q->next;

}

return dummy.next;

}

};

这个方法的核心是通过收集所有节点值→排序数组→重建链表的三步操作,把合并 K 个有序链表转化为更易实现的数组操作。

它的优势是思路直观、代码好写,用数组排序规避了复杂的链表指针操作,虚拟头节点还能处理空链表等边界情况;缺点是需要额外数组空间,时间复杂度为O(NlogN)(N 是总节点数),适合小规模数据或快速实现的场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 1:57:18

基于单片机的全自动洗衣机系统的设计

基于单片机的全自动洗衣机系统的设计 第一章 引言 传统洗衣机依赖人工手动控制进水、洗涤、漂洗、脱水等流程&#xff0c;操作繁琐且水资源与电能浪费严重。随着智能家居技术的发展&#xff0c;全自动洗衣机成为家庭生活的主流需求&#xff0c;其核心在于通过智能控制实现洗衣流…

作者头像 李华
网站建设 2026/6/23 13:36:48

5.6 模型部署与智能体集成实战

5.6 模型部署与智能体集成实战 直播导语:同学们,欢迎来到我们《Agentic AI 智能体开发行动营》的最后一次直播课!在过去的五周里,我们一起经历了一段非凡的旅程:从 Function Calling 的“第一次接触”,到 LangGraph 的“图之思维”,再到“旅小智”的“全栈出海”,最终我…

作者头像 李华
网站建设 2026/6/23 9:08:13

基于单片机的球赛计分牌的设计

基于单片机的球赛计分牌的设计 第一章 引言 球类赛事&#xff08;篮球、排球、羽毛球等&#xff09;的公平开展离不开精准的计分、计时与局数/犯规统计&#xff0c;传统人工计分方式存在效率低下、易出错、数据同步不及时等问题&#xff0c;尤其在多场次、多项目的基层赛事中&a…

作者头像 李华
网站建设 2026/6/23 19:15:23

ArcGIS Pro 从入门到实战基础篇(10):地图菜单

在 ArcGIS Pro 中&#xff0c;“地图”菜单是进行地图查看、导航、选择、标注与图层管理的主要工作区&#xff0c;是用户日常制图操作最常用、最核心的菜单之一。 地图菜单的作用 在软件的使用过程中&#xff0c;使用最多的菜单就是“地图”菜单&#xff0c;在这个菜单中囊括…

作者头像 李华
网站建设 2026/6/23 19:15:18

Kotaemon与Redis/Memcached集成:构建高速缓存层

Kotaemon与Redis/Memcached集成&#xff1a;构建高速缓存层 在如今智能客服、企业知识助手和行业问答系统日益普及的背景下&#xff0c;用户对响应速度的要求越来越高——“秒回”已成基本标准。然而&#xff0c;一个典型的检索增强生成&#xff08;RAG&#xff09;流程往往涉…

作者头像 李华
网站建设 2026/6/23 19:17:58

【鸿蒙三方库编译】lycium_plusplus(lycium++)高效完成鸿蒙C/C++编译

lycium_plusplus介绍 项目地址 lycium 是基于openharmony cpp 编译框架lycium的增强 主要包含以下几个目标&#xff1a; 针对目标产物&#xff0c;构建依赖关系树&#xff0c;一键构建对于三方库的HPKBUILD&#xff0c;提供多版本构建能力&#xff0c;代码仓脱离本仓独立发…

作者头像 李华