当前位置: 首页 > article >正文

leetcode_链表 21.合并两个有序链表

21.合并两个有序链表

  • 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  • 思路:
    1. 定义一个哑节点(dummy node),哑节点是一个初始的虚拟节点,它不存储有效值,只是方便操作,定义一个指针 current 指向哑节点,用于构建新链表。
    2. 遍历两个链表,使用两个指针 p1 和 p2 分别指向 list1 和 list2 的头部,并比较 p1.val 和 p2.val,将较小值的节点连接到 current.next。
    3. 处理剩余部分,当一个链表遍历完后,将另一个链表的剩余部分直接连接到 current.next。
    4. 返回结果,最终返回哑节点的下一个节点 dummy.next,即为合并后的链表头。
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self, list1, list2):
 # 定义哑节点和当前指针
        dummy = ListNode(-1)  # 哑节点,初始值无意义
        current = dummy

        # 遍历两个链表
        while list1 and list2:
            if list1.val <= list2.val:  # 比较两个链表当前节点的值
                current.next = list1  # 将list1当前节点连接到结果链表
                list1 = list1.next  # 移动list1指针
            else:
                current.next = list2  # 将list2当前节点连接到结果链表
                list2 = list2.next  # 移动list2指针
            current = current.next  # 移动结果链表指针

        # 处理剩余部分
        if list1:  # 如果list1还有节点
            current.next = list1
        if list2:  # 如果list2还有节点
            current.next = list2

        # 返回合并后的链表头
        return dummy.next

        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
  • 时间复杂度:O(m+n)
    • 每次操作一个节点,总共需要遍历两个链表的所有节点,即时间复杂度为 O(n + m),其中 n 和 m 是两个链表的长度。
  • 空间复杂度:O(1)

http://www.kler.cn/a/516299.html

相关文章:

  • Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制
  • 使用KNN实现对鸢尾花数据集或者自定义数据集的的预测
  • vim在命令模式下的查找功能
  • Ubuntu 24.04 LTS 通过 docker 安装 nextcloud 搭建个人网盘
  • 解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
  • 【QNX】QNX侧查看CPU的信息
  • Github 2025-01-23 Go开源项目日报 Top10
  • 【29】Word:李楠-学术期刊❗
  • GPSd定时检测保活TCP GPS源
  • React 路由导航与传参详解
  • 力扣hot100-->滑动窗口、贪心
  • Vue入门(Vue基本语法、axios、组件、事件分发)
  • Python自带模块实现屏幕像素高效操作
  • VUE对接deepseekAPI调用
  • 【LeetCode 刷题】二叉树-深度优先遍历
  • Chromium 132 编译指南 Mac 篇(二)- 安装 Xcode
  • WPF-系统资源
  • 豆包MarsCode:小C点菜问题
  • 左/右侧边栏布局(Semi design)
  • FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转
  • react antd点击table单元格文字下载指定的excel路径
  • Conmi的正确答案——Rider中引入WebView2包(C#)
  • Django 日志配置实战指南
  • .NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger
  • 【项目初始化】自定义异常处理
  • 终极的复杂,是简单