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

链表题解——合并两个有序链表【LeetCode】

 1. 算法思路

这段代码的核心思想是 合并两个有序链表。具体步骤如下:

  1. 初始化哨兵节点

    • 创建一个哨兵节点 dummy,用于简化链表操作,避免处理头节点的特殊情况。
    • 使用指针 cur 指向 dummy,用于构建新的链表。
  2. 遍历两个链表

    • 使用 while l1 and l2 循环遍历两个链表,比较当前节点的值:
      • 如果 l1.val < l2.val,将 l1 节点连接到 cur 的后面,并移动 l1 指针。
      • 否则,将 l2 节点连接到 cur 的后面,并移动 l2 指针。
    • 每次连接一个节点后,移动 cur 指针到新连接的节点。
  3. 处理剩余部分

    • 当其中一个链表遍历完毕后,将另一个链表的剩余部分直接连接到 cur 的后面。
  4. 返回结果

    • 返回 dummy.next,即合并后的链表的头节点。

2. 时间复杂度

  • 最坏情况
    • 需要遍历两个链表的全部节点,假设两个链表的长度分别为 m 和 n,则时间复杂度为 O(m + n)
  • 最好情况
    • 如果其中一个链表为空,直接返回另一个链表,时间复杂度为 O(1)

3. 空间复杂度

  • 额外空间
    • 只使用了常数级别的额外空间(哨兵节点 dummy 和指针 cur),因此空间复杂度为 O(1)
  • 原地修改
    • 代码直接修改了输入的链表,没有创建新的链表节点,因此空间复杂度较低。
class Solution:def mergeTwoLists(self, l1, l2):dummy = ListNode(0)  # 哨兵节点cur = dummywhile l1 and l2:if l1.val < l2.val:cur.next = l1l1 = l1.nextelse:cur.next = l2l2 = l2.nextcur = cur.nextcur.next = l1 if l1 else l2  # 将剩余部分连接到结果链表return dummy.next

  原代码

class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""dummy = ListNode(0)cur = dummywhile list1 and list2:if list1.val < list2.val:cur.next = list1list1 = list1.nextelse:cur.next = list2list2 = list2.nextcur = cur.nextcur.next = list1 if list1 else list2return dummy.next

http://www.xdnf.cn/news/10392.html

相关文章:

  • Linux系统开机自启动配置
  • 如何将内网的IP地址映射到外网?详细方法与步骤解析
  • Tomcat优化篇
  • 小白的进阶之路系列之九----人工智能从初步到精通pytorch综合运用的讲解第二部分
  • IDEA,Spring Boot,类路径
  • Vue框架2(vue搭建方式2:利用脚手架,ElementUI)
  • SQL注入攻击的方法与预防
  • 神经网络-Day42
  • 量化面试绿皮书:1. 海盗分金博弈
  • 【C/C++】面试常考题目
  • (面试)获取View宽高的几种方式
  • vim 的基本使用
  • 华为深度学习面试手撕题:手写nn.Conv2d()函数
  • C++: STL简介与string类核心技术解析及其模拟实现
  • vue3动态路由的实现以及目录权限的设置
  • Eclipse 修改字符集
  • [Godot] 如何导出安卓 APK 并在手机上调试
  • 【金融基础学习】债券市场与债券价值分析
  • ck-editor5的研究 (3):初步使用 CKEditor5 的事件系统和API
  • Mac电脑上本地安装 MySQL并配置开启自启完整流程
  • 历史数据分析——广州港
  • 计算机网络(5)——数据链路层
  • 【数据结构】图的存储(十字链表)
  • 微调大模型:什么时候该做,什么时候不该做?
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • 【火山引擎 大模型批量处理数据教程-详细】
  • 基于千帆大模型的AI体检报告解读系统实战:使用OSS与PDFBox实现PDF内容识别
  • WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配
  • Rust 学习笔记:发布一个 crate 到 crates.io
  • Python 序列的修改、散列和切 片(Vector类第5版:格式化)