LC 21链表简单第 27 / 95 题

合并两个有序链表

Merge Two Sorted Lists

链表双指针
本机进度仅保存在当前浏览器

题目描述

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

示例:1 -> 2 -> 4 与 1 -> 3 -> 4 合并得 1 -> 1 -> 2 -> 3 -> 4 -> 4。

解题思路

  1. 与归并排序的合并步骤同构:每次比较两链表头节点,摘下较小者接到结果尾部。
  2. 引入哑节点(dummy)统一"第一个节点"的接法,免去对头节点的特判,最后返回 dummy.next。
  3. 一条链耗尽后,另一条剩余部分天然有序且都大于已接结果,直接整体接上即可。

参考实现

查看参考实现Python · 建议先自行作答
def mergeTwoLists(l1, l2):
    # 哑节点简化头部接法
    dummy = tail = ListNode(0)
    while l1 and l2:
        if l1.val <= l2.val:
            tail.next = l1
            l1 = l1.next
        else:
            tail.next = l2
            l2 = l2.next
        tail = tail.next
    tail.next = l1 if l1 else l2
    return dummy.next

复杂度与归属

时间复杂度O(m + n)
空间复杂度O(1)
所属分类链表
题源LeetCode 21

关联教程

返回题图鉴