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

输入:
[1,2,4]
[1,3,4]输出:
[1,1,2,3,4,4]示例 2:
输入:
[]
[]输出:
[]示例 3:
输入:
[]
[0]输出:
[0]提示:
- 两个链表的节点数目范围是
[0, 50] -100 <= Node.val <= 100l1和l2均按 非递减顺序 排列
思路
递归合并:比较两条链表的头结点,较小者作为合并结果的头,其
next
指向「剩余部分」的合并结果;任一链表为空时直接返回另一条。递归深度与链长成正比,也可用哑结点
+ 双指针迭代做到
空间。
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
if list1 is None:
return list2
if list2 is None:
return list1
if list1.val < list2.val:
list1.next = self.mergeTwoLists(list1.next, list2)
return list1
else:
list2.next = self.mergeTwoLists(list1, list2.next)
return list221. 合并两个有序链表
https://mingsm17518.github.io/2026/09/14/刷题笔记/Hot100/21. 合并两个有序链表/