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

链表题解——两数相加【LeetCode】

方法一:递归

写法一:创建新节点

算法思路解析

该实现采用 递归方式 逐位处理两个链表,并考虑进位 carry

✨ 步骤拆解
  1. 递归终止条件:当 l1, l2 都为空且没有进位(carry == 0),说明加法结束,返回 None

  2. 当前位求和:s = carry + l1.val (如果有) + l2.val (如果有)

  3. 计算当前节点的值与进位:当前节点值为 s % 10,进位为 s // 10

  4. 递归构造下一节点:递归调用 addTwoNumbers(l1.next, l2.next, carry) 处理下一位

  5. 创建当前节点并连接:使用 ListNode(s % 10, next_node) 构造当前节点并返回

class Solution:# l1 和 l2 为当前遍历的节点,carry 为进位def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode], carry=0) -> Optional[ListNode]:if l1 is None and l2 is None and carry == 0:  # 递归边界return Nones = carryif l1:s += l1.val  # 累加进位与节点值l1 = l1.nextif l2:s += l2.vall2 = l2.next# s 除以 10 的余数为当前节点值,商为进位return ListNode(s % 10, self.addTwoNumbers(l1, l2, s // 10))

时间与空间复杂度分析

时间复杂度:O(max(m, n))
  • 每次递归处理一个节点,最多递归 max(m, n) 层(m 和 n 为两个链表的长度)。

空间复杂度:
类型复杂度说明
递归栈空间O(max(m, n))每层递归入栈一次
结果链表空间O(max(m, n) + 1)存储最终和(可能有一个额外的进位位)

⚠️ 注意:这是递归写法,存在函数栈空间占用,若链表极长(如上千位),可能导致栈溢出风险(可改为迭代方式避免)。

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

相关文章:

  • .NET MAUI跨平台串口通讯方案
  • 永磁无刷电机旋转原理
  • 架构轻巧的kokoro 文本转语音模型
  • Apipost 和 Apifox 2025最新功能对比分析
  • 2-深度学习挖短线股-1-股票范围选择
  • [3D-portfolio] 版块包装高阶组件(封装到HOC) | Email表单逻辑 | 链式调用
  • 桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏
  • 基于SpringBoot和Leaflet的区域冲突可视化-以伊以冲突为例
  • Robyn高性能Web框架系列06:使用WebSocket实现产品智能助理
  • SQL学习笔记3
  • 图像质量对比感悟
  • 智表ZCELL产品V3.2 版发布,新增拖动调整行列功能,修复了插件引用相对路径等问题
  • 【C++11】右值引用和移动语义
  • Hive3.1.3加载paimon-hive-connector-3.1-1.1.1.jar报错UnsatisfiedLinkError
  • 解决uniapp vue3版本封装组件后:deep()样式穿透不生效的问题
  • 【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿
  • 超实用AI工具分享——ViiTor AI视频配音功能教程(附图文)
  • php项目部署----------酒店项目
  • 知攻善防应急靶机 Windows web 3
  • LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
  • 笔记02:布线-差分对的设置与添加
  • Liunx操作系统笔记2
  • 《解锁前端潜力:自动化流程搭建秘籍》
  • Boosting:从理论到实践——集成学习中的偏差征服者
  • linux-修改文件命令(补充)
  • Jenkins Pipeline 与 Python 脚本之间使用环境变量通信
  • 数的三次方根
  • 【深度学习新浪潮】空间计算的医疗应用技术分析(简要版)
  • TCP/UDP协议深度解析(二):TCP连接管理全解,三次握手四次挥手的完整流程
  • Linux docker拉取镜像报错解决