当前位置: 首页 > 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.jsqmd.com/news/1112362/

相关文章:

  • 医疗电子PCB设计指南:中频理疗仪电路板关键技术
  • 首个threejs项目-前端填坑指南
  • 永劫无间5周年新版本来袭!手机远程对战,周年内容不错过!
  • 专科生必学:8款AI工具提升学习效率
  • YOLOv10模型改进-Backbone改进-第56篇:YOLOv10改进策略【Backbone】| ConvNeXt Backbone替换
  • Zemax界面和功能介绍(三)
  • 数据的存储与运算
  • 2026年暑假学习规划App横评:哪家技术更强?
  • HarmonyOS 模板市场实战:64 款内置卡片、分类补齐与搜索过滤
  • 让你分分钟理解 JavaScript 闭包
  • 搜索框防抖 + 竞态完整总结
  • 向量检索评测:相似度高不等于业务命中
  • ZN-044A国产手持式分析仪 守护风电通信,助力绿色能源高效运维
  • ASP.NET路由模型解析
  • 第1章. 故事的缘起
  • Shell脚本实现Nginx一键自动化部署与优化
  • 破译生命“暗物质”:高通量多因子检测如何重塑现代生物医学研究
  • OEXN:“低价高息股票再受关注”
  • 【ChatGPT编程入门黄金法则】:20年工程师亲授——零基础7天掌握Python/JS核心语法并写出可运行项目
  • YOLOv8结构化剪枝实战:基于BN系数的通道剪枝方法
  • 分布式系统的日志监控
  • Windows批处理脚本实现SSH自动化部署与文件传输
  • ChatIG架构揭秘:高效推理网关背后的技术原理
  • 3分钟解锁Windows 11任务栏自定义:Taskbar11让你重获桌面控制权
  • 把《呼吸里的爱》放回真实生活里听
  • 云原生技术26-让Pod飞起来:K8s性能调优的20个技巧,CPU、内存、网络全链路调优
  • 升级纯血鸿蒙后,小艺Agent和伴随式AI能做什么?
  • 电光机械振荡器(E-OMO)的神经形态计算应用
  • iOS开发系列--Swift语言
  • Git的优点