LeetCode--代码详解 2.两数相加

news2024/11/26 18:23:33

2.两数相加

题目

难度:中等

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

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

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

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

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

思路

小学生加法计算,只不过用链表来实现

个位数和个位数相加,十位数和十位数相加,用carry来进位,用current来指向存储结果的链表的当前节点


例子详解

当输入是 l1 = [2,4,3]l2 = [5,6,4] 时,我们将执行 addTwoNumbers 方法中的循环。下面是每个循环迭代的分析:

  1. 第一次循环:

    • val1 = 2, val2 = 5, carry = 0
    • currentSum = 2 + 5 + 0 = 7
    • carry = 0
    • 创建新节点 current.next = ListNode(7)

    结果链表:[7]

  2. 第二次循环:

    • val1 = 4, val2 = 6, carry = 0
    • currentSum = 4 + 6 + 0 = 10
    • carry = 1 (由于上一位的进位)
    • 创建新节点 current.next = ListNode(0)

    结果链表:[7, 0]

  3. 第三次循环:

    • val1 = 3, val2 = 4, carry = 1
    • currentSum = 3 + 4 + 1 = 8
    • carry = 0
    • 创建新节点 current.next = ListNode(8)

    结果链表:[7, 0, 8]

  4. 结束循环,返回结果链表 [7, 0, 8] 表示 2->4->35->6->4 相加的结果。

这样,每个循环迭代都处理两个链表的当前节点值以及上一位的进位,生成一个新节点,并将结果连接到结果链表中。


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 pre = new ListNode(0); // 创建一个新的链表,pre是其虚拟头节点
      ListNode current = pre; // 创建一个指针current,指向当前处理的节点
      int carry = 0; // carry表示进位
      while(l1 != null || l2 != null) { // 当l1或l2不为空时,进入循环
        int x = l1 == null ? 0 : l1.val; // 如果l1不为空,取l1的值,否则取0
        int y = l2 == null ? 0 : l2.val; // 如果l2不为空,取l2的值,否则取0
        int sum = x + y + carry; // 计算当前位的和
        
        carry = sum / 10; // 更新进位
        sum = sum % 10; // 计算当前位的值
        current.next = new ListNode(sum); // 创建一个新的节点,值为sum,然后将cur的next指向这个新节点

        current = current.next; // 将current向后移动一位
        if(l1 != null)
            l1 = l1.next; // 如果l1不为空,将l1向后移动一位
        if(l2 != null)
            l2 = l2.next; // 如果l2不为空,将l2向后移动一位
    }
    if(carry == 1) { // 如果最后还有进位
        current.next = new ListNode(carry); // 创建一个新的节点,值为carry,然后将cur的next指向这个新节点
    }
    return pre.next; // 返回结果链表的头节点
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQT——蓝牙收发数据(上位机案例-小车控制器)

实现功能 由于本人水平有限&#xff0c;仅用了最简单的进行实现&#xff0c;主要功能&#xff1a; 蓝牙设备扫描以及刷新蓝牙连接蓝牙数据发送蓝牙数据接收 页面实现效果 代码目录结构 代码案例 代码已经全部添加注释&#xff0c;故不再做单独解释。 Main.py ble_contr…

学成在线:媒体资源管理系统(MAM)

媒体资源管理系统(MAM) 媒体资源管理系统(Media Asset Management)是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容进行数字化存储、管理以及应用的总体解决方案,可以满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求,为媒体资源…

蓝桥杯备战——13.PCF8591芯片的使用

目录 1.芯片简介2.读写时序3.控制字4.代码封装库5.原理图分析6.使用示例 1.芯片简介 截取自NXP的PCF8591芯片数据手册&#xff0c;我把重点关注部分划出来了&#xff0c;请务必自行阅读一遍数据手册&#xff01; 2.读写时序 ①器件地址&#xff1a; Bit0决定是读还是写操作&…

企业网站管理系统(多语言)

应用介绍 响应式PC&#xff1a; https://demo.ldcms.com.cn/ 响应式H5&#xff1a; 前端小程序&#xff1a; 后台登录网址&#xff1a; https://demo.ldcms.com.cn/ESBFdpKflc.php/index/login 前端截图&#xff1a; 后台截图&#xff1a; 本文来自&#xff1a;企业网站管理…

基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

问题:金属电化学反应的实质是氧化还原反应,被腐蚀金属发生还原反应( ) #知识分享#知识分享#媒体

问题&#xff1a;金属电化学反应的实质是氧化还原反应&#xff0c;被腐蚀金属发生还原反应(  ) A、正确 B、错误 参考答案如图所示

项目02《游戏-05-开发》Unity3D

基于 项目02《游戏-04-开发》Unity3D &#xff0c; 【任务】UI背包系统&#xff0c; 首先将Game窗口设置成1920 * 1080&#xff0c; 设置Canvas的缩放模式&#xff0c;&#xff1a;这样设置能让窗口在任意分辨率下都以一个正确的方式显示&#xff0c; 设置数值&…

Angular BaseView抽离页面公用属性

前言 如果有一系列的页面布局很类似&#xff0c;为了节省时间&#xff0c;我们可以把这些类似的页面所通用的属性和方法抽离成一个BaseView&#xff0c;让其它页面继承该基础页面&#xff0c;同时将一些经常改变的属性和差异的属性写到配置文件里。例如树容器初始时是否展开、…

【测试运维】性能测试笔记文档第2篇:性能测试分类和指标(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论性能测试相关知识。入门阶段&#xff1a;认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试)&#xff0c;常用性能测试指标-(吞吐量、并发数、响应时间、点击数…)&#xff0c;性能测试工具选择。性能脚本&a…

Linux文件编译

目录 一、GCC编译 1.直接编译 2.分步编译 预处理&#xff1a; 编译&#xff1a; 汇编&#xff1a; 链接&#xff1a; 3.多文件编译 4.G 二、Make 1.概述 2.使用步骤 3.makefile创建规则 3.1一个基本规则 3.2两个常用函数 4.示例文件 三、GDB 示例&#xff1a;…

STM32单片机的基本原理与应用(六)

串口测试实验 基本原理 在串口实验中&#xff0c;是通过mini_USB线搭建终端与电脑端&#xff08;也可称终端&#xff0c;为做区分称电脑端&#xff09;的“桥梁”&#xff0c;电脑端的串口调试助手通过mini_USB线向终端发送信息&#xff0c;由CH340芯片将USB接口进行转换&…

PyTorch 2.2 中文官方教程(十五)

&#xff08;beta&#xff09;计算机视觉的量化迁移学习教程 原文&#xff1a;pytorch.org/tutorials/intermediate/quantized_transfer_learning_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 提示 为了充分利用本教程&#xff0c;我们建议使用这个C…

linux下的预编译、编译、汇编、连接,生成单独文件,感受编译过程

linux下的预编译、编译、汇编、连接&#xff0c;生成单独文件。首先需要确认系统安装了gcc编译器&#xff0c;输入gcc -v或者g -v&#xff0c;如果能看到版本号等信息就是已经存在了&#xff0c;如图&#xff08;centos7&#xff09;&#xff1a; 然后随便vim产生一个.cpp文件&…

什么是前端工程化,请举例说明

前端工程化 前端工程化的定义为什么需要前端工程化前端工程化的核心概念 模块化开发&#xff1a;组件化开发&#xff1a;规范化开发&#xff1a;自动化开发&#xff1a;持续集成 前端工程化的主要工具前端工程化的应用总结&#xff1a; 前端工程化 前端工程化的定义 前端工程…

zabbix监控mariadb数据库

zabbix监控mariadb数据库 1.创建监控用户及授权 [rootchang ~]# mysql -uroot -p123qqq.A MariaDB [(none)]> CREATE USER monitor% IDENTIFIED BY 123qqq.A; MariaDB [(none)]> GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO monitor%; Maria…

使用最大边界相关算法处理文章自动摘要

一、需求背景 对于博客或者文章来说&#xff0c;摘要是普遍性的需求。但是我们不可能让作者自己手动填写摘要或者直接暴力截取文章的部分段落作为摘要&#xff0c;这样既不符合逻辑又不具有代表性&#xff0c;那么&#xff0c;是否有相关的算法或者数学理论能够完成这个需求呢&…

【高质量精品】2024美赛B题22页word版高质量半成品论文+多版保奖思路+数据+前四问思路代码等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;获取完整论文&#xff01;&#xff01; B 题整体模型构建 1. 潜水器动力系统失效&#xff1a;模型需要考虑潜水器在无推进力情况下的行为。 2. 失去与主船通信&#xff1a;考虑无法从主船接收指令或发送位置信息的情况。…

基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题需求

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

深度学习介绍

对于具备完善业务逻辑的任务&#xff0c;大多数情况下&#xff0c;正常的人都可以给出一个符合业务逻辑的应用程序。但是对于一些包含超过人类所能考虑到的逻辑的任务&#xff0c;例如面对如下任务&#xff1a; 编写一个应用程序&#xff0c;接受地理信息、卫星图像和一些历史…

【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…