1. 问题定义与场景解析
链表合并是数据结构与算法中的经典问题,尤其在处理有序数据时具有重要应用价值。想象你手上有两叠已经按学号排好序的学生卡片,现在需要将它们合并成一叠且保持顺序——这正是合并两个有序链表的现实类比。
这个问题看似简单,却涵盖了链表操作的多个核心知识点:
- 指针/引用的操作
- 边界条件处理
- 空间复杂度的优化
- 递归与迭代的思维转换
在实际工程中,合并有序链表的场景比比皆是:
- 数据库合并两个有序结果集
- 归并排序中的子问题
- 日志系统的时序记录合并
- 版本控制系统中的变更合并
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构基础与问题分析
2.1 链表结构回顾
单向链表由节点(Node)组成,每个节点包含:
python复制class ListNode:
def __init__(self, val=0, next=None):
self.val = val # 存储的值
self.next = next # 指向下一个节点的指针
关键特性:
- 非连续内存存储
- O(1)时间的前插/删除
- O(n)时间的随机访问
- 头节点是唯一入口点
2.2 问题输入输出规范
输入:两个升序排列的链表头节点
输出:合并后的新链表头节点
要求:
- 新链表必须通过拼接原有节点组成
- 必须保持升序排列
- 不能创建新节点(空间复杂度O(1))
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
3. 迭代解法实现与优化
3.1 基础迭代算法
python复制def mergeTwoLists(l1, l2):
dummy = ListNode() # 哨兵节点
curr = dummy
while l1 and l2:
if l1.val <= l2.val:
curr.next = l1
l1 = l1.next
else:
curr.next = l2
l2 = l2.next
curr = curr.next
cu
