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

二、思路分析

1、将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,例如:9999999 + 9999 = 9999999 + 0009999 = 10009998;
2、每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值;
3、如果两个链表全部遍历完毕后,进位值为 1,则需要在结果链表最后添加新节点 1;

三、代码参考

1、Java

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {// 创建预先指针,该指针的下一个节点指向返回结果的链表的头节点ListNode preNode = new ListNode(0);// 创建遍历时需要进行操作的指针ListNode currentNode = preNode;// 用来存储进位,初始值为 0 int carry = 0;// 循环遍历,同时遍历 l1、l2 两个链表,直到两个链表中的所有节点都遍历完毕为止while(l1 != null || l2 != null){// 获取 l1 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位int value1 = l1 == null ? 0 : l1.val;// 获取 l2 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位int value2 = l2 == null ? 0 : l2.val;// 每一位计算的同时需要考虑上一位的进位情况int sum = value1 + value2 + carry;// 计算是否有进位的情况carry = sum / 10;// 获取当前计算结果的个位数// 比如 7 + 8 = 15,那么 sum % 10 = 5int digit = sum % 10;// 构建一个节点用来存放这个个位数,把这个节点加入到结果链表中currentNode.next = new ListNode(digit);// currentNode 节点向后移动currentNode = currentNode.next;// l1 链表中还有节点未遍历完毕就继续遍历下去if(l1 != null) l1 = l1.next;// l2 链表中还有节点未遍历完毕就继续遍历下去if(l2 != null) l2 = l2.next;}// 两个链表的尾节点相加之后,有可能产生进位的情况,所以,需要构建一个新的节点用来存放这个进位的结果if(carry == 1) {// 把这个节点加入到结果链表中currentNode.next = new ListNode(carry);}// 返回结果链表return preNode.next;}
}

2、Python

class Solution(object):def addTwoNumbers(self, l1, l2):# 创建预先指针,该指针的下一个节点指向返回结果的链表的头节点preNode = ListNode(0)# 创建遍历时需要进行操作的指针currentNode = preNode# 用来存储进位,初始值为 0 carry = 0# 循环遍历,同时遍历 l1、l2 两个链表,直到两个链表中的所有节点都遍历完毕为止while l1 or l2 :# 获取 l1 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位value1 = l1.val if l1 else 0# 获取 l2 链表的值,注意,由于链表的存储和实际数字是反过来,所以链表的头节点的值是个位value2 = l2.val if l2 else 0# 每一位计算的同时需要考虑上一位的进位情况sum = value1 + value2 + carry# 计算是否有进位的情况carry = sum / 10# 获取当前计算结果的个位数# 比如 7 + 8 = 15,那么 sum % 10 = 5digit = sum % 10# 构建一个节点用来存放这个个位数,把这个节点加入到结果链表中currentNode.next = ListNode(digit)# currentNode 节点向后移动currentNode = currentNode.next# l1 链表中还有节点未遍历完毕就继续遍历下去if l1 :l1 = l1.next# l2 链表中还有节点未遍历完毕就继续遍历下去if l2 :l2 = l2.next# 两个链表的尾节点相加之后,有可能产生进位的情况,所以,需要构建一个新的节点用来存放这个进位的结果if carry == 1 :# 把这个节点加入到结果链表中currentNode.next = ListNode(carry)# 返回结果链表return preNode.next

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

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

相关文章

QT上位机开发(网络程序界面开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 传统的上位机对接方式还是以232、485、can为主&#xff0c;随着网络的发展&#xff0c;越来越多的设备都是以网络进行通信的。毕竟相比较之前&…

java练习题之List(ArrayList)集合练习

List集合 习题&#xff1a; 1&#xff1a;完成以下填空&#xff1a; List 接口的特点是元素 有序 &#xff08;有|无&#xff09;顺序&#xff0c; 可重复 &#xff08;可以|不可以&#xff09;重复&#xff1b; 2&#xff1a;(List)关于List 集合描述正确的是&#xff08;…

肠道炎症与年龄和阿尔茨海默病病理学相关:一项人类队列研究

谷禾健康 ​阿尔茨海默 研究表明&#xff0c;慢性低水平的炎症&#xff08;“炎症衰老”&#xff09;可能是年龄相关疾病的一个介导因素&#xff0c;而肠道微生物通过破坏肠道屏障可能会促进炎症。 虽然老化和阿尔茨海默病&#xff08;AD&#xff09;与肠道微生物群组成的改变有…

Mybatis缓存实现方式

文章目录 装饰器模式Cache 接口及核心实现Cache 接口装饰器1. BlockingCache2. FifoCache3. LruCache4. SoftCache5. WeakCache 小结 缓存是优化数据库性能的常用手段之一&#xff0c;我们在实践中经常使用的是 Memcached、Redis 等外部缓存组件&#xff0c;很多持久化框架提供…

ClickHouse基础介绍

目录 前言 1、什么是clickhouse 2、OLAP场景的关键特征 3、列式存储更适合于OLAP场景的原因 4、clickhouse的独特功能 5、clickhouse的缺点 6、性能 6.1、单个大查询的吞吐量 6.2、处理短查询的延迟时间 6.3、处理大量短查询的吞吐量 6.4、数据的写入性能 前言 11月…

Keras实现seq2seq

概述 Seq2Seq是一种深度学习模型&#xff0c;主要用于处理序列到序列的转换问题&#xff0c;如机器翻译、对话生成等。该模型主要由两个循环神经网络&#xff08;RNN&#xff09;组成&#xff0c;一个是编码器&#xff08;Encoder&#xff09;&#xff0c;另一个是解码器…

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…

vmware虚拟机安装esxi7.0步骤

一、安装准备 1、下载镜像文件 下载链接&#xff1a;https://pan.baidu.com/s/12XmWBCI1zgbpN4lewqYw6g 提取码&#xff1a;mdtx 2、vmware新建一个虚拟机 2.1 选择自定义 2.2 选择ESXi对应版本 2.3 选择稍后安装操作系统 2.4 默认选择 2.5 自定义虚拟机名称及存储位置 2…

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…

Jenkins分布式实现: 构建弹性和可扩展的CI/CD环境!

Jenkins是一个流行的开源持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;CD&#xff09;工具&#xff0c;它通过自动化构建、测试和部署过程&#xff0c;帮助开发团队更高效地交付软件。Jenkins的…

a标签锚点链接 + 遇到的问题

目录 需求背景实现思路遇到的问题问题解决关于锚点链接其他问题 需求背景 页面左侧是一级、二级标题&#xff0c;页面右侧是一级、二级标题对应的内容点击左侧标题&#xff0c;锚点链接&#xff0c;右侧内容跳转到左侧标题对应的内容区域 实现思路 通过 a 标签 id 的方法实现…

嵌入式Linux之Ubuntu学习笔记(Makefile规则格式)

Makefile里面是由一系列的规则组成的&#xff0c;这些规则格式如下&#xff1a; 目标&#xff1a;依赖文件集合 命令1 命令2 …… 列&#xff1a; main&#xff1a;main.o input.o calcu.o gcc -o main main.o input.o calcu.o 命令列表中的每条命令必须以TAB键开始&am…

Mac——VsCode使用格式化工具进行整理和格式化

1. 打开VSCode编辑器。 2. 点击左下角⚙️图标&#xff0c;打开设置 3. 进入设置后&#xff0c;你会看到一个搜索框&#xff0c;在搜索框中输入 format on save 来查找相关设置项。 4. 在设置列表中找到 Editor: Format On Save 选项&#xff0c;勾选它以启用在保存文件时自动格…

LeetCode206链表反转

//我来理解一下运用递归求解 class Solution { public:ListNode* reverseList(ListNode* head) {//首先判断是否为最后一个元素if(head null|| head.next null){return head;//返回末尾元素}ListNode* receive;//此时进入循环的每一层都实现了temp接收head.next的结点进行…

详解bookkeeper AutoRecovery机制

引言小故事 张三在一家小型互联网公司上班&#xff0c;由于公司实行的996&#xff0c;因此经常有同事“不辞而别”&#xff0c;为了工作的正常推进&#xff0c;团队内达成了某种默契&#xff0c;这种默契就是通过某个规则来选出一个同事&#xff0c;这个同事除了工作之余还有额…

让人头痛事务问题到底要如何解决?

前言 正好前段时间我在公司处理过这个问题&#xff0c;我们当时由于项目初期时间比较紧张&#xff0c;为了快速完成业务功能&#xff0c;忽略了系统部分性能问题。项目顺利上线后&#xff0c;专门抽了一个迭代的时间去解决大事务问题&#xff0c;目前已经优化完成&#xff0c;并…

【2024最新版】Win11基础配置操作(磁盘分区、修改各种默认存储位置、安装软件操作)【释放C盘空间】

文章目录 一、硬盘分区0. 磁盘管理1. 压缩卷2. 新建简单卷向导 二、修改默认存储位置1. 保持新内容的地方a. 位置b. 操作 2. 快速访问六件套a. 位置b. 操作 三、安装软件0. 应用商店设置a. 设置中心b. 修改下载设置 1. 微信电脑版设置a. 下载b. 安装c. 聊天记录迁移与备份d. 存…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可&#xff0c;没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 未安装证书是这样的&#xff1a; 上述我们可…

《Linux C编程实战》笔记:创建线程

上一章是进程&#xff0c;这一章是线程 有关线程进程的概念之类的请自行学操作系统吧&#xff0c;书里都是偏实战应用的 线程创建函数pthread_create #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)…

设计循环队列——oj题622

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;LeetCode刷题|数据结构|Linux 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 题目要求&#xff1a;应该支持如下操作&#xff1a;示例&#xff1a;提示&#xff1a; 结构体定义队列的创建基本操作判断队列是否为空&#xf…