Files
LeetCode/链表/6. 合并两个有序链表.md
T
2025-10-03 14:44:21 +08:00

76 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 合并两个有序链表
## 题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 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 均按 非递减顺序 排列
## 思路
- 比较后尾插法
## 代码
```java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// Init: DummyHead, cur
ListNode dummyHead = new ListNode(-1);
ListNode cur = dummyHead;
// Traverse: Compare
while (list1 != null && list2 != null) {
// val1 = list1.val;
// val2 = list2.val;
ListNode tmp = null;
if (list1.val > list2.val) {
tmp = list2;
list2 = list2.next;
} else {
tmp = list1;
list1 = list1.next;
}
cur.next = tmp;
cur = cur.next;
}
cur.next = list1 == null ? list2 : list1;
return dummyHead.next;
}
}
```