当前位置: 首页 > news >正文

【刷题日记】LeetCode 21. 合并两个有序列表

合并两个有序链表

题目描述

给定两个升序排列的链表,将它们合并为一个新的升序链表并返回。新链表应通过拼接两个原始链表的所有节点组成。

示例 1

输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]

示例 2

输入:l1 = [], l2 = [] 输出:[]

示例 3

输入:l1 = [], l2 = [0] 输出:[0]

提示

  • 两个链表的节点数目范围是 [0, 50]
  • -100 ≤ Node.val ≤ 100
  • l1 和 l2 均按非递减顺序排列

解题思路

合并两个有序链表是链表操作的经典问题,常见解法包括:

  1. 递归法:代码简洁,但递归深度受链表长度限制,空间复杂度为 O(m+n)
  2. 迭代法:空间复杂度更优,仅需常数级额外空间

本文采用迭代法,核心思路如下:

  1. 创建哑节点(虚拟头节点),其 next 指针将指向合并后的链表头
  2. 同时遍历两个链表,比较当前节点的值
  3. 将较小值的节点接入结果链表尾部
  4. 移动对应链表的指针继续比较
  5. 当某链表遍历完毕时,将另一链表的剩余部分直接拼接至尾部

使用哑节点可避免对头节点为空的特殊处理,使代码更统一简洁。

解题步骤

  1. 初始化哨兵节点dummy = ListNode(),作为合并链表的虚拟头节点
  2. 维护尾指针tail = dummy,始终指向合并链表的末尾
  3. 循环比较
    • list1list2均非空时:
      • list1.val ≤ list2.val,将list1接入尾部并后移指针
      • 否则,将list2接入尾部并后移指针
    • 每次操作后,tail指针后移一位
  4. 处理剩余节点:将未遍历完的链表直接接至tail.next
  5. 返回结果dummy.next即为合并后的有序链表
http://www.gsyq.cn/news/1624338.html

相关文章:

  • 让你分分钟理解 JavaScript 闭包
  • Shell脚本实现Nginx一键自动化部署与优化
  • 向量检索评测:相似度高不等于业务命中
  • ZN-044A国产手持式分析仪 守护风电通信,助力绿色能源高效运维
  • 分布式系统的日志监控
  • 破译生命“暗物质”:高通量多因子检测如何重塑现代生物医学研究
  • ChatIG架构揭秘:高效推理网关背后的技术原理
  • iOS开发系列--Swift语言
  • 电光机械振荡器(E-OMO)的神经形态计算应用
  • Stable Diffusion推理速度优化全攻略:从硬件到软件
  • Git的优点
  • 明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析。先提前祝大家猴年新春快乐、万事如意、身体健康!
  • 每日热门skill:AI终于长出手了!ai-web-automation:让OpenClaw自己上网干活,我摸了3天鱼
  • Burp Suite实战指南:从核心模块到Web安全测试工作流
  • “眼睁睁看它穿墙而过!“:连续碰撞检测的“全程盯防“之道
  • Artix-7 FPGA DPLL 实现 50Hz 工频同步 ADC 采样完整方案
  • DataDjinn v0.2.7:SSH 隧道连上了,表格工作区也终于更稳了
  • AI数据中心与汽车行业在能源管理领域的技术融合
  • ModSecurity CRS实战:解决误报、性能瓶颈与规则更新的完整指南
  • 辛辛那提 MATH1071 离散数学笔记(五)
  • 深度学习模型参数量计算与形状推导实战指南
  • 2026 年国内开发者如何用好 GPT:充值避坑与代码提效实战
  • 实事求是的讲,写《【野生程序员】:优先招聘》的时候,
  • 计算机视觉入门到精通:构建识别、检测与分割的实战框架
  • 免费数据恢复神器:TestDisk与PhotoRec完整指南
  • 出海运维实操:解决东南亚网站CDN缓存残留、页面不更新、快照错乱问题
  • 95.基于 PLC 扫描周期原理!西门子 S7-1200 实现带软硬件互锁、防短路保护、自锁保持的电机正反转控制系统
  • 密码学博客:AES-ECB模式致命缺陷、攻击原理、实战与全面防御
  • REST简介
  • HarmonyOS 卡片详情到编辑闭环:router 参数、模板转实例与空白 fallback