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

链表题解——合并两个有序链表【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

相关文章:

  • 【数据结构】顺序表和链表详解(上)
  • 剪枝中的 `break` 与 `return` 区别详解
  • JS中的函数防抖和节流:提升性能的关键技术
  • barker-OFDM模糊函数原理及仿真
  • DelphiXe12创建DataSnap REST Application
  • 阴盘奇门 api数据接口
  • 中国高分辨率高质量地面NO2数据集(2008-2023)
  • ​​技术深度解析:《鸿蒙5.0+:无感续航的智能魔法》​
  • SSRF 接收器
  • 抖音客户端训练营--day2
  • 第13讲、Odoo 18 配置文件(odoo.conf)详细解读
  • [Android] APK安装器 V20160330-6.0
  • 重学计算机网络之以太网
  • 精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)
  • 基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计
  • wsl安装linux
  • 【火山引擎 大模型批量处理数据教程-详细】
  • 从前端工程化角度解析 Vite 打包策略:为何选择 Rollup 而非 esbuild。
  • Windows搭建Swift语言编译环境?如何构建ObjC语言编译环境?Swift如何引入ObjC框架?Interface Builder的历史?
  • 数据库,Spring Boot,数据源
  • 网站的服务器怎么做的/搜索引擎seo关键词优化效果
  • 开发软件需要学什么专业/石家庄seo结算
  • 宁波seo链接优化/网站排名优化多少钱
  • 北京网站建设制作/站长工具站长
  • 政府网站集约化建设管理/在线排名优化
  • 网站排名下降原因/东莞百度seo电话