hot100 合并两个有序链表(21)
本题采用双指针迭代算法又称“哑节点辅助归并法”解决两个有序单链表的合并问题。其核心本质是利用单调递增的先验条件通过双指针同步线性扫描在常数阶额外空间内将两个空间独立的拓扑序列融合成全新的全局有序链表。当前提供的源码实现了在时间复杂度 O(M N) 和额外空间复杂度 O(1) 条件下的全局最优线性检索最终走向是高效拼接所有节点并返回新链表的头节点。一、 问题本质与数据模型对于给定的两个单链表list1和list2它们在物理拓扑结构上彼此独立但在数据分布上满足相同的单调性约束均按非递减顺序排列即node.val node.next.val。若采用常规的随机构建或重新排序将破坏原有的局部有序性导致算力浪费。算法通过引入两个核心机制破除信息无序困局“哑节点Dummy Node定位模型”在合并初期由于无法预知两链表的首节点孰小直接确定新链表的头节点会引入复杂的边界判定。通过开辟一个虚拟的dummy节点作为新链表的常驻起点可以将“头节点的初始化”抽象为常规的“追加后续节点”操作从而实现控制流的归一化。“双指针线性归并机制”设置两个指针分别指向两个链表的未处理头部每次比较当前节点的数值。由于两链表局部有序当前较小者必然是全局未合并元素中的极小值将其拼接到新链表尾部能绝对保障新链表的升序物理形态。二、 算法演进对比在解决有序链表合并问题时迭代归并法在时空资源的利用效率上达到了理论极限解法名称时间复杂度空间复杂度核心原理物理瓶颈 / 缺陷暴力重组排序法O((MN) log(MN))O(MN)将两个链表的所有节点值全部复制到数组中通过快速排序后重新物理构建一条新链表完全忽略了原链表有序的先验条件产生了高昂的排序时间损耗与外部存储空间开销递归归并法O(M N)O(M N)将问题拆解为头节点的比较剩余部分交由递归函数处理利用隐含的系统栈实现挂载递归调用会在系统栈中产生深度为 M N 的栈帧开销在超长链表下有引发栈溢出的物理风险迭代归并法当前解法O(M N)O(1)利用哑节点和双指针进行原地指针重定向单遍线性扫描即完成物理拼接指针交替推进需要严密防控链表触底时的空指针判定逻辑三、 核心分支控制逻辑与决策证明当前源码的控制流完全依赖于while (list1 ! null list2 ! null)边界防护网以及后续的尾部残留挂载其内部决策分支证明如下1. 局部极小值命中分支if (list1.val list2.val)执行cur.next list1; list1 list1.next;数学证明已知两链表当前剩余部分皆为升序。若list1.val list2.val则list1.val严格小于list2集合中的所有剩余元素同时list1.val也小于或等于list1后续的所有元素。结论list1当前节点是所有未合并节点中的绝对极小值将其作为新链表的下一节点在数学上完全合规。执行步进将list1指针后移。2. 补集极小值命中分支else即list1.val list2.val执行cur.next list2; list2 list2.next;数学证明同理当list2.val小于或等于list1.val时list2.val必然小于或等于两个链表剩余集合中的任意元素。结论list2当前节点满足全局极小值条件将其拼接到cur.next并将list2指针后移。3. 残留段物理挂载cur.next (list1 ! null) ? list1 : list2;执行当while循环因其中一个链表触底变为null而终止时直接将另一非空链表挂载至cur.next。数学证明由于两个链表本身严格升序当其中一个链表被完全耗尽时另一个链表中的所有剩余节点必然都大于或等于已合并链表中的最大元素且其内部已维持升序拓扑结构。结论无需继续遍历对比直接执行 O(1) 级别的指针挂载即可保障全局有序流程提前终结。四、 算法执行状态机步进示例以输入链表list1 [1, 2, 4]list2 [1, 3, 4]为例指针状态机的演进过程如下表所示dummy初始值设为 0步骤list1当前指向list2当前指向比较状态与分支执行的核心剪枝与挂载动作新链表当前拓扑状态 (dummy.next开始)初始1 (-2-4)1 (-3-4)进入循环边界初始化cur指向dummydummy11 (-2-4)1 (-3-4)1 1 (进入 else)cur.next指向list2的 1list2后移1 (来自list2)21 (-2-4)3 (-4)1 3 (进入 if)cur.next指向list1的 1list1后移1 - 132 (-4)3 (-4)2 3 (进入 if)cur.next指向list1的 2list1后移1 - 1 - 244 (-null)3 (-4)4 3 (进入 else)cur.next指向list2的 3list2后移1 - 1 - 2 - 354 (-null)4 (-null)4 4 (进入 else)cur.next指向list2的 4list2变为null1 - 1 - 2 - 3 - 4 (来自list2)64 (-null)null循环退出判定触发残留挂载cur.next直接指向list1的 41 - 1 - 2 - 3 - 4 - 4五、 源码实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val val; } * ListNode(int val, ListNode next) { this.val val; this.next next; } * } */ class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { // 创建独立哑节点 dummy用作新链表的固定的控制流哨兵 ListNode dummy new ListNode(0); // 初始化当前工作指针 cur指向哑节点 ListNode cur dummy; // 双指针同步推进当两个链表均未触底时执行线性比对 while (list1 ! null list2 ! null) { // 分支 1list1 节点值更小挂载 list1 并将指针后移 if (list1.val list2.val) { cur.next list1; list1 list1.next; } // 分支 2list2 节点值更小或相等挂载 list2 并将指针后移 else { cur.next list2; list2 list2.next; } // 新链表工作指针向后步进 1 位 cur cur.next; } // 边界处理将尚未遍历完毕的非空链表段直接挂载到新链表尾部 cur.next (list1 ! null) ? list1 : list2; // 返回新链表的物理真实头节点 return dummy.next; } }六、 复杂度分析1. 时间复杂度O(M N)分析设list1的长度为 Mlist2的长度为 N。在while循环的每次迭代中list1或list2的指针必定会向后推进 1 个节点同时新链表的控制指针cur也会同步推进。因此循环的最大迭代次数为 M N。当循环结束后残留段的挂载操作耗时为常数阶 O(1)。结论总的节点比较与指针重定向操作次数与两个输入链表的长度总和呈严格的线性正比关系。2. 空间复杂度O(1)分析算法在运行期间除了创建了一个用于统一控制流边界的哑节点dummy之外仅在栈内存中开辟了cur一个用于节点迭代定位的引用变量。整个重组过程是通过直接修改输入链表节点的next指针域来实现的原地In-place拼接。结论没有申请任何与输入链表规模相关的外部或临时数据结构内存空间损耗恒定为常数阶。

相关新闻

触觉引导模型选型:面向真实环境的刚度-时变-不确定性三维适配指南

触觉引导模型选型:面向真实环境的刚度-时变-不确定性三维适配指南

1. 这不是选“哪个模型更好”,而是选“哪个模型能让你的机械臂在真实场景里不撞墙、不打滑、不丢手感”“如何选择遥操作中的触觉引导模型:环境适配指南”——这个标题里藏着一个被太多论文和Demo忽略的残酷现实:90%以上公开评测中表现优异的…

2026/7/7 10:28:40阅读更多 →
2026年文件管理和存储服务市场报告:从市场规模到产业链格局,全球版图全拆解

2026年文件管理和存储服务市场报告:从市场规模到产业链格局,全球版图全拆解

一、市场规模与增长驱动力:数字化转型推动文档管理服务稳步扩张根据GIR (Global Info Research)调研数据,2025年全球文件管理和存储服务市场收入稳步增长,预计至2032年将保持较高增长态势。据行业研究机构统计,2025年全球文档存储…

2026/7/7 10:28:40阅读更多 →
终极崩坏星穹铁道自动化指南:如何轻松解放你的游戏时间

终极崩坏星穹铁道自动化指南:如何轻松解放你的游戏时间

终极崩坏星穹铁道自动化指南:如何轻松解放你的游戏时间 【免费下载链接】StarRailAssistant 崩坏:星穹铁道自动化 | 崩坏:星穹铁道自动锄大地 | 崩坏:星穹铁道锄大地 | 自动锄大地 | 基于模拟按键 项目地址: https://gitcode.co…

2026/7/7 10:28:40阅读更多 →
复杂网络建模 3 大经典模型对比:ER 随机图、WS 小世界与 BA 无标度网络

复杂网络建模 3 大经典模型对比:ER 随机图、WS 小世界与 BA 无标度网络

复杂网络建模三大经典模型深度解析:从ER随机图到BA无标度网络 引言:复杂网络的世界 清晨醒来,你打开手机查看社交媒体动态,这些信息通过互联网的复杂节点传递;通勤时,地铁网络的调度系统确保列车高效运行&…

2026/7/7 11:38:47阅读更多 →
微软 MAI 模型家族与 Agent 优先战略:自研模型能否摆脱 OpenAI 依赖

微软 MAI 模型家族与 Agent 优先战略:自研模型能否摆脱 OpenAI 依赖

2026 年的 Build 大会上,微软明确提出了"Agent 优先"战略,并一次性发布了 7 款自研 MAI 模型。这是微软多年来在 AI 领域最重要的一次产品矩阵扩张,也标志着其与 OpenAI 的关系从"紧密盟友"逐渐转向"合作竞争"…

2026/7/7 11:38:47阅读更多 →
文件上传漏洞攻防全解析:从原理到实战绕过与防御

文件上传漏洞攻防全解析:从原理到实战绕过与防御

1. 项目概述:从“上传”到“控制”的攻防博弈文件上传,一个几乎存在于所有Web应用中的基础功能,从更换头像到提交作业,无处不在。然而,这个看似简单的功能,一旦后端处理逻辑存在缺陷,就可能成为…

2026/7/7 11:38:47阅读更多 →
CCM模式

CCM模式

CCM 模式详解:定义、原理、公式推导与实例演示 一、CCM 模式基础定义(带权威溯源) CCM 全称Continuous Conduction Mode,连续导通模式,是电感型 DC-DC 开关变换器(Buck 降压电路属于这类)的经典工作模式。 1. 核心判定标准 在每一个完整的开关周期内,储能电感的电流…

2026/7/7 11:38:47阅读更多 →
第24章:RAG 管线深度解析——从文档到向量再到答案

第24章:RAG 管线深度解析——从文档到向量再到答案

1. 项目背景 第 5 章我们以"用户视角"体验了 RAG——上传文档、配置分段、测试检索。但当产品经理追问"为什么 PDF 第 15 页的’保修期 2 年’搜不到"时,你需要从"管线视角"排查。Dify 的 RAG 管线分为六个环节:提取(Extractor)→ 分段(Sp…

2026/7/7 11:38:47阅读更多 →
RFID技术在固定资产盘点中的应用

RFID技术在固定资产盘点中的应用

固定资产是企业、机关事业单位生产经营与日常运营的核心物质基础,涵盖办公设备、生产器械、仓储设施、机电设备、房屋附属设施等各类长期资产,具有数量大、品类杂、分布散、使用周期长的特点。固定资产盘点是资产管控的核心环节,承担着核实资…

2026/7/7 11:33:46阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →