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

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
核心思路
双指针比较:类似归并排序的合并过程,每次选择两个链表中较小的节点。
list1: 1 → 2 → 4
list2: 1 → 3 → 4
合并过程:
比较1和1 → 选1(list1)
比较2和1 → 选1(list2)
比较2和3 → 选2(list1)
比较4和3 → 选3(list2)
比较4和4 → 选4(list1)
剩余4(list2)
结果: 1 → 1 → 2 → 3 → 4 → 4
题解:
java
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 创建哑节点,简化边界处理
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
// 两个链表都还有节点时,选择较小的
while (list1 != null && list2 != null) {
if (list1.val <= list2.val) {
curr.next = list1;
list1 = list1.next;
} else {
curr.next = list2;
list2 = list2.next;
}
curr = curr.next;
}
// 连接剩余的节点
if (list1 != null) {
curr.next = list1;
}
if (list2 != null) {
curr.next = list2;
}
return dummy.next;
}
}
```
### 详细演示
```
list1: 1 → 2 → 4
list2: 1 → 3 → 4
创建哑节点:
dummy → null
curr指向dummy
第1次比较:
------------------
list1.val = 1, list2.val = 1
1 <= 1,选list1
dummy → 1
↑
list1
curr移动: curr = curr.next
list1移动: list1 = list1.next
现在:
dummy → 1 → null
↑
curr
list1 = 2
list2 = 1
第2次比较:
------------------
list1.val = 2, list2.val = 1
2 > 1,选list2
dummy → 1 → 1
↑
list2
curr移动,list2移动
现在:
dummy → 1 → 1 → null
↑
curr
list1 = 2
list2 = 3
第3次比较:
------------------
list1.val = 2, list2.val = 3
2 <= 3,选list1
dummy → 1 → 1 → 2
↑
list1
curr移动,list1移动
现在:
dummy → 1 → 1 → 2 → null
↑
curr
list1 = 4
list2 = 3
第4次比较:
------------------
list1.val = 4, list2.val = 3
4 > 3,选list2
dummy → 1 → 1 → 2 → 3
↑
list2
curr移动,list2移动
现在:
dummy → 1 → 1 → 2 → 3 → null
↑
curr
list1 = 4
list2 = 4
第5次比较:
------------------
list1.val = 4, list2.val = 4
4 <= 4,选list1
dummy → 1 → 1 → 2 → 3 → 4
↑
list1
curr移动,list1移动
现在:
dummy → 1 → 1 → 2 → 3 → 4 → null
↑
curr
list1 = null
list2 = 4
循环结束(list1为null)
------------------
连接剩余: curr.next = list2
dummy → 1 → 1 → 2 → 3 → 4 → 4
↑
list2
返回 dummy.next
结果: 1 → 1 → 2 → 3 → 4 → 4
本质
合并两个有序链表的核心:
- 归并思想:类似归并排序的合并过程
- 双指针:分别指向两个链表,选择较小的
- 哑节点技巧:简化头节点的处理
这是链表操作的基础题,掌握了迭代和递归两种写法,就能应对各种变体。