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

力扣hot100:两数相加(模拟竖式加法详解)(2)

题目描述

解题思路

核心思想是模拟竖式加法,逐位相加并处理进位。具体步骤如下:

  1. 初始化
    • 创建虚拟头节点 result(值为 0),简化链表操作。
    • 用指针 temp 遍历结果链表,jinwei 记录进位(初始为 0)。
  2. 遍历链表
    • 同时遍历 l1 和 l2,若链表已结束则用 0 补齐。
    • 计算当前位的和:x1 + x2 + jinwei
  3. 处理进位
    • 更新进位:jinwei = sum / 10
    • 当前位的值:sum % 10
  4. 构建新节点
    • 将计算出的值存入新节点,并移动 temp
  5. 处理剩余进位
    • 若遍历结束仍有进位(jinwei > 0),需额外添加节点。

关键点

  • 哑节点的使用:避免处理头节点的特殊情况。
  • 进位处理:进位可能持续传递(如 999 + 1 = 1000)。
  • 链表长度不一:通过补 0 解决长短链表对齐问题。
代码实现
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode result = new ListNode(0); // 虚拟头节点ListNode temp = result;            // 遍历指针int jinwei = 0;                    // 进位while (l1 != null || l2 != null) { // 遍历直到两链表结束// 获取当前节点的值(链表结束则补0)int x1 = (l1 != null) ? l1.val : 0;int x2 = (l2 != null) ? l2.val : 0;int sum = x1 + x2 + jinwei;    // 当前位的总和jinwei = sum / 10;             // 更新进位sum %= 10;                     // 当前位的实际值temp.next = new ListNode(sum); // 创建新节点temp = temp.next;              // 移动指针// 移动原链表指针(未结束才移动)if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;}// 处理最后的进位if (jinwei == 1) {temp.next = new ListNode(1);}return result.next; // 返回哑节点的下一个(真实头节点)}
}

复杂度分析
  • 时间复杂度O(max(m, n)) m 和 n 分别为两链表的长度,需遍历较长链表的所有节点。
  • 空间复杂度O(max(m, n)) + 1 结果链表长度为 max(m, n) 或 max(m, n) + 1(有进位时)。
总结

本题的解题核心是模拟竖式加法,通过哑节点统一操作逻辑,重点关注:

  1. 进位传递:用 jinwei 记录进位,并在下一位计算中加入。
  2. 长短链表处理:通过条件判断 l1 != null ? l1.val : 0 补零对齐。
  3. 边界检查:循环结束后需检查是否有剩余进位。

此方法高效且直观,是处理链表相加问题的通用范式。掌握后,可轻松应对类似问题(如力扣 445 题“两数相加 II”)。

http://www.dtcms.com/a/393596.html

相关文章:

  • Zotero + Word 插件管理参考文献的引用
  • 用Python一键整理文件:自动分类DOCX与PDF,告别文件夹杂乱
  • Ubuntu部署Elasticsearch教程
  • 61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额
  • 一款基于 .NET 开源、免费、命令行式的哔哩哔哩视频内容下载工具
  • Win Semi宣布推出线性优化的GaN工艺
  • 考研408计算机网络2025年第38题真题解析
  • C++编写的经典贪吃蛇游戏
  • 风险预测模型原理
  • PS练习5:利用翻转制作图像倒影
  • 平替Jenkins,推荐一款国产开源免费的CICD工具 - Arbess
  • aws 实战小bug
  • NumPy 系列(一):numpy 数组基础
  • VSCode 的 launch.json 配置
  • OpenLayers地图交互 -- 章节六:范围交互详解
  • 分布式专题——15 ZooKeeper特性与节点数据类型详解
  • 分布式专题——16 ZooKeeper经典应用场景实战(上)
  • Torch-Rechub学习笔记-task2
  • Hadoop分布式计算平台
  • hive调优系列-1.调优须知
  • 爆炸特效:Unity+Blender-01
  • 解决切换 Node 版本后 “pnpm 不是内部或外部命令”问题
  • flag使用错误出现bug
  • 【Kafka面试精讲 Day 20】集群监控与性能评估
  • SQL 注入攻防:绕过注释符过滤的N种方法
  • 微软常用运行库
  • 在Kubernetes(k8s)环境中无法删除持久卷(PV)和持久卷声明(PVC)的解决方案
  • 【连载7】 C# MVC 跨框架异常处理对比:.NET Framework 与 .NET Core 实现差异
  • 芯脉:面向高速接口的SoC架构与完整性设计<3>
  • ArrayList与LinkedList深度对比