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

【LeetCode 2】力扣算法:两数相加

题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

image


要将两个逆序存储的链表表示的非负整数相加,我们可以模拟手算加法的过程。

算法步骤:

  1. 初始化:创建一个虚拟头节点 dummyHead,用于简化结果链表的构建。同时,初始化一个指针 res 指向 dummyHead,用于构建结果链表。还需要一个变量 carry 来存储进位。

  2. 逐位相加:遍历两个链表,对每一位进行相加,同时加上上一次迭代的进位 carry。更新 carry 为新的进位。

  3. 处理进位:如果遍历完两个链表后仍有进位,需要继续创建新的节点直到进位为0。

  4. 返回结果:返回 dummyHead.next,即结果链表的头节点。

复杂度分析:

  • 时间复杂度:O (max(m, n)),其中 m 和 n 分别是两个链表的长度。我们最多遍历两个链表的长度。

  • 空间复杂度:O (max(m, n)),因为需要创建新的节点来存储结果。在最坏的情况下,如果两个链表长度相等,且每一位相加都产生进位,需要创建与链表长度相同的新节点。

我的 Java 代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode dummyHead = new ListNode(0);  // 创建一个虚拟头节点ListNode res = dummyHead;int carry = 0;  // 存储进位值// 逐位相加while(l1 != null || l2 != null){int val1 = (l1==null)? 0:l1.val;int val2 = (l2==null)? 0:l2.val;int sum = val1+val2+carry;  // 当前位的和加上进位carry = sum/10;   // 更新进位值res.next = new ListNode(sum % 10); // 创建新节点,存储当前位的结果// 移动链表指针res = res.next;if(l1 != null)   l1 = l1.next;if(l2 != null)   l2 = l2.next;}// 如果最后还有进位,要添加一个新的节点if(carry>0){res.next = new ListNode(carry);}return dummyHead.next;}
}
http://www.sczhlp.com/news/967/

相关文章:

  • 测试支持 PolarDB-X(高度兼容 MySQL) 的客户端图形工具
  • Gitlab Runner怎么使用缓存cache加快构建速度
  • 一个38岁程序员的五年之约:软考、重构与独立开发者之路
  • 1.初看代码
  • Tita 新绩效一体化产品:重塑企业绩效管理新范式
  • 完整教程:【Unity笔记03】#if的用法和命名空间
  • 莫比乌斯反演+杜教筛+Plya学习笔记
  • 可持久化并查集
  • SAP 工序委外简介
  • GitHub汉化教程
  • Django中遇到choice定义的模型类中的字段,通过输入数字展示输出对应中文的需求
  • 提示工程:大语言模型的新特征工程
  • MyEMS开源能源管理系统核心代码解读022
  • 强化集成、可靠性与信任:Stack Overflow for Teams 新功能解析
  • 5090+Ubuntu24.04安装pytorch环境(时间点:202507) - fourk
  • 理解JavaScript中的闭包
  • Air8000 GPIO实战指南:LuatIO配置是否不可或缺?设计建议
  • 普源PVP2150/PVP2350的理想替代方案:西安普科PK6150/PK6350无源探头全面评测
  • 1688商品列表API调用全过程分享
  • 深度揭秘!Java Class 文件加密终极指南,有效保护你的核心代码
  • springboot项目打包成docker镜像
  • 克劳德代码与 Cursor 的问题:AI 编程的死亡螺旋
  • [题解]P5094 [USACO04OPEN] MooFest G 加强版
  • Win10专业版如何关闭Windows错误报告的问题
  • Win11正式版玩游戏输入法冲突的问题
  • Elasticsearch Circuit Breaker 全面解析与最佳实践 - 教程
  • ROS1(20.04 noetic) + PX4 + AirSim
  • 扩散模型-PPDM-95 - jack
  • 5.5 减少过程调用
  • spring springmvc springboot的区别