LeetCode--2.两数相加

文章目录

  • 1 题目描述
  • 2 解题思路
    • 2.1 代码实现

1 题目描述

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

请你将两个数相加, 并以相同形式返回一个表示和的链表
你可以假设除了数字 0 之外, 这两个数都不会以 0 开头
示例 1:
image.png

输入: 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
  • 题目数据保证列表表示的数字不含前导零

2 解题思路

从题目描述看, 是从0 ~ n 结点遍历 ListNode l1, l2, 计算相同位置节点的和, 需要注意进位

  1. 计算相同位置节点的和: int sum = l1.val + l2.val + increase, 其中 increase 是进位
  2. 当前节点需要保存的数据 sum % 10, 计算进位 increase = sum / 10
  3. 需要考虑 l1 和 l2 遍历时, 可能会存在遍历完成时, 获取当前节点 val 时, 需要补充为 0
  4. 将 l1 和 l2 指向 next 节点

2.1 代码实现

/**  
 * 1. 需要考虑两个链表为空的情况  
 * 2. 需要考虑计算进位问题  
 * 3. 需要考虑两个链表长度不一致, 短的链表需要荣光补 0 来实现  
 */  
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {  
    // 考虑两个链表为空的情况  
    if (null == l1 || null == l2) {  
        return null == l1 ? l2 : l1;  
    }  
  
    // 定义负数做头结点的链表ListNode, 用于存储结果  
    ListNode result = new ListNode(-1);  
    // 定义当前链表的指针  
    ListNode current = result;  
    // 定义进位  
    int increase = 0;  
    // 遍历两个链表, 如果两个链表都为空, 并且进位为 0, 则结束循环  
    // 例如 l1 = [2, 3, 6], l2 = [5, 6, 4] 时, 当 l1, l2 都遍历完毕后, 还需要判断进位, 此时进位为 1, 则需要再增加一个节点, 最终结果为 [7, 9, 0, 1]    while (l1 != null || l2 != null || increase != 0) {  
        // 计算两个链表的值, 如果链表为空, 则补充为 0        /*         * 例如 l1 = [2, 3, 6], l2 = [5, 6, 4, 9, 11] 时, 当 l2 遍历到 9 时, l1 已经为空了,  
         * 此时需要给 l1 补充一个 0, 才能继续计算, 此时 l1.val = 0, l2.val = 9, increase = 1         */        int sum = (null == l1 ? 0 : l1.val) + (null == l2 ? 0 : l2.val) + increase;  
        current.next = new ListNode(sum % 10);  
        // 计算进位  
        increase = sum / 10;  
        // 移动链表ListNode l1 和 l2 的指针, 用于下一次计算  
        if (l1 != null) {  
            l1 = l1.next;  
        }  
        if (l2 != null) {  
            l2 = l2.next;  
        }  
        // 移动链表的指针, 用于下一次计算  
        current = current.next;  
    }  
    // 返回链表的下一个节点, 因为第一个节点是负数做头结点的链表ListNode  
    return result.next;  
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis archive github

https://github.com/redis/redis/releases/tag/7.2.2https://github.com/redis/redis/releases/tag/7.2.2

虹科分享 | 买车无忧?AR带来全新体验!

文章来源&#xff1a;虹科数字化与AR 阅读原文&#xff1a;https://mp.weixin.qq.com/s/XsUFCTsiI4bkEMBHcGUT7w 新能源汽车的蓬勃发展&#xff0c;推动着汽车行业加速进行数字化变革。据数据显示&#xff0c;全球新能源汽车销售额持续上升&#xff0c;预计到2025年&#xff0…

VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴

本文 以 Python 语言开发 我们在做三维软件开发时&#xff0c;经常会用到相机坐标轴&#xff0c;来指示当前空间位置&#xff1b; 坐标轴效果&#xff1a; 相机方向坐标轴 Cube 正方体坐标轴 自定义坐标轴&#xff1a; Code&#xff1a; Axes def main():colors vtkNamedC…

Git总结

Git介绍 一、Git常用命令 添加、提交 git add 将文件从工作区添加到暂存区&#xff0c;表示git开始追踪文件&#xff0c;如果不想让git追踪了&#xff0c;可以使用 git rm --cached <file> 取消文件追踪&#xff0c;仅仅只代表追踪取消&#xff0c;工作区文件还是照…

折磨的Ts

先看下官网 这里的withDefault是给props设置默认值的 由于props传入了个函数在设置默认值的时候不知道怎么设置了 解决办法&#xff1a;直接不设置了。也不写了。

简单了解一下:NodeJS的WebSocket网络编程

NodeJS的webSocket网络编程。 那什么是WebSocket呢&#xff1f;WebSocket是HTML5提供的一种浏览器和服务器进行通信的网络技术。两者之间&#xff0c;只需要做一个握手动作&#xff0c;就可以在浏览器和服务器之间开启一条通道&#xff0c;就可以进行数据相互传输。 实现WebS…

行情分析——加密货币市场大盘走势(10.27)

目前大饼开始了震荡盘整&#xff0c;目前远离EMA21均线&#xff0c;预计会有大的回调动作。而MACD日线来看&#xff0c;昨日和今日开始呈现绿色空心柱&#xff0c;也在说明大饼在做震荡盘整。不排除大跌的可能性&#xff0c;大饼可以开始布局中长线空单&#xff0c;可以再35000…

死锁Deadlock

定义 死锁是指两个或多个线程互相持有对方所需的资源&#xff0c;从而导致它们无法继续执行的情况。如下图所示&#xff0c;现有两个线程&#xff0c;分别是线程A及线程B&#xff0c;线程A持有锁A&#xff0c;线程B持有锁B。此时线程A想获取锁B&#xff0c;但锁B需等到线程B的结…

设计模式之桥梁模式

什么是桥梁模式 桥梁模式&#xff08;Bridge Pattern&#xff09;也称为桥接模式&#xff0c;属于结构型模式&#xff0c;它主要目的是通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。桥梁模式将抽象部分与它的具体实现部分分离&#xff0c;使它们都可以独立地变…

Dockerfile文件自动化生成R4L镜像

Dockerfile文件自动化生成R4L镜像的步骤 1、安装Docker&#xff1a;2、使用Dockerfile一键生成镜像&#xff1a;3、查看生成的Docker镜像&#xff1a;4、删除Docker镜像&#xff1a;5、生成Docker容器&#xff1a;6、查看容器7、删除容器 1、安装Docker&#xff1a; curl -fsS…

C语言之预处理

目录 前言 宏定义define的用法 文件包含include的用法 条件编译的用法 其他预处理命令 练习题 练习一 练习二 练习三 前言 预处理命令可以改变程序设计环境&#xff0c;提高编程效率&#xff0c;它们并不是C语言本身的组成部分&#xff0c;不能直接对它们进行编译&am…

京东(天猫)数据分析:2023下半年茶饮料市场高速增长,东方树叶一骑绝尘

当前在食品饮料行业中&#xff0c;整体的增长放缓&#xff0c;且各个细分品类上都已经充分竞争。但茶饮料市场例外&#xff0c;近两年呈现高增长的态势&#xff0c;一来取决于行业头部企业也在积极推动茶饮料不断升级&#xff0c;另外是主打更健康、更时尚的茶饮料深受年轻消费…

51单片机汽车胎压大气气压测量仪仿真设计_数码管显示(代码+仿真+设计报告+讲解)

51单片机汽车胎压大气气压测量仪仿真设计_数码管显示 (代码仿真设计报告讲解) 仿真原版本&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0018 目录 51单片机汽车胎压大气气压测量仪仿真设计_数码管显示功…

洗衣行业在线预约小程序+前后端完整搭建教程

大家好哇&#xff0c;好久不见&#xff01;今天源码师父来给大家推荐一款洗衣行业在线预约的小程序&#xff0c;带有前后端的完整搭建教程。 目前&#xff0c;人们对生活品质的追求不断提高&#xff0c;但生活节奏却也不断加快。对品质的追求遇到了忙碌的生活节奏&#xff0c;…

网络协议--广播和多播

12.1 引言 在第1章中我们提到有三种IP地址&#xff1a;单播地址、广播地址和多播地址。本章将更详细地介绍广播和多播。 广播和多播仅应用于UDP&#xff0c;它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议&#xff0c;它意味着分别运行于两主…

基于安卓android微信小程序的投票系统

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;投票系统小程序被用户普遍使用&#xff0c;为方便用户…

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】

文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…

【网络安全无小事】汽车网络安全:只有开局,没有尽头,聚光向前,安全到达

“ 汽车网络安全: 只有开局&#xff0c;没有尽头&#xff0c;聚光向前&#xff0c;安全到达。” 01 — 引言 汽车一直以来都将速度、激情、男性荷尔蒙和阳刚气息联系在一起&#xff0c;这种联系似乎已经成为了文化符号。然而&#xff0c;作为一名安全从业者&#xff0c;我时常担…

Linux (KDE) 中使用Network Settings设置静态ip

在 Linux (KDE) 中使用 Network Settings 设置s5静态IP详细教程 。 首先&#xff0c;打开 KDE 的设置面板。可以通过点击桌面上的设置图标&#xff0c;或者在开始菜单中搜索 “Settings” 并打开。 在设置面板中&#xff0c;点击 “Network” 选项。 接下来&#xff0c;你会看…

简单聊下Redis的主从复制和哨兵机制以及集群(面试题)

ChatGPT的简答&#xff1a; Redis的主从复制&#xff08;Master-Slave Replication&#xff09;是指将一个Redis服务器的数据复制到其他Redis服务器的过程&#xff0c;其中一个服务器作为主节点&#xff08;Master&#xff09;&#xff0c;而其他服务器作为从节点&#xff08;S…