news 2026/3/24 23:15:47

合并两个有序链表:双指针迭代法实现(C++)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
合并两个有序链表:双指针迭代法实现(C++)

一、问题描述

将两个升序链表合并为一个新的升序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

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

二、解题思路

1. 递推关系分析

合并两个升序链表的核心是逐个比较两个链表的当前节点值,选择较小的节点接入新链表,直到其中一个链表遍历完毕。

  • 若链表 l1 的当前节点值 ≤ 链表 l2 的当前节点值,将 l1 的当前节点接入新链表,l1 指针后移;
  • 若链表 l2 的当前节点值更小,将 l2 的当前节点接入新链表,l2 指针后移;
  • 当其中一个链表遍历完成后,直接将另一个链表的剩余节点拼接至新链表末尾即可。

为简化头节点为空的边界处理,引入虚拟头节点,避免单独处理首个节点的选择逻辑。

2. 算法选择

  • 递归法:通过递归调用合并剩余节点,代码简洁但会产生递归调用栈,空间复杂度为 O (m+n)(m、n 为两个链表的长度),且递归深度较大时可能出现栈溢出;
  • 双指针迭代法:用指针遍历两个链表并拼接节点,仅使用常数级额外空间,时间复杂度为 O (m+n),空间复杂度为 O (1),是更高效的解法。

三、C++ 代码实现

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

多样化算力使能:openFuyao引领算力池化与调度革命

目录一、算力管理的行业痛点与openFuyao的技术定位1.1 行业核心痛点解析1.2 openFuyao的技术定位与核心价值二、openFuyao多样化算力资源池化技术2.1 资源池化架构:分层设计,弹性伸缩2.2 资源监控与可视化:全链路可观测三、openFuyao算力调度…

作者头像 李华
网站建设 2026/3/21 21:48:39

51单片机:了解最小核心系统

目录 一、最小核心系统的核心定义与作用 1. 核心定义 2. 核心作用 二、最小核心系统的组成(拆解到每一个元件) 三、各模块的核心工作原理(极简版) 1. 电源电路:稳定供电 滤波 2. 时钟电路:提供 “时…

作者头像 李华
网站建设 2026/3/23 13:14:15

C# 委托/事件/UnityEvent 详解

1. 委托 (Delegate)1.1 基本概念委托是C#中的一种类型,它允许将方法作为参数传递,类似于C/C中的函数指针,但类型安全。1.2 委托声明与使用基本语法:csharp// 1. 声明委托类型 delegate void MyDelegate(string message); delegate…

作者头像 李华
网站建设 2026/3/13 0:07:28

chrome英文翻译插件

插件下载地址 https://immersivetranslate.com/download/ 基本设置 快捷键

作者头像 李华
网站建设 2026/3/19 16:43:59

量子计算+机器学习调试实战(VSCode高阶技巧全公开)

第一章:量子机器学习的 VSCode 调试在开发量子机器学习应用时,调试是确保算法逻辑正确性和性能优化的关键环节。Visual Studio Code(VSCode)凭借其强大的扩展生态和灵活的调试配置,成为量子计算开发者首选的集成开发环…

作者头像 李华
网站建设 2026/3/21 14:09:21

电脑系统缺少OpenAL32.dll文件 无法启动软件问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华