题目:

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

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

你可以假设除了数字 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
题目数据保证列表表示的数字不含前导零

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.仍然先初始化一个指针dummy,该指针的下一个结点指向真正的头结点head;

2.将两个链表看成同等长度进行遍历,如果一个链表较短,则在最前面补0,例如:9998+932= 9998+0932=10930;

3.每计算当前两个数字的和时,需要加上上一位的进位值,并且也需要计算出当前进位的值;

4.链表全部遍历完后,最后一位也有进位值时,在新链表最后添加一个新的结点,并且题中给了每个结点值在0~9,故进位值不可能大于1,则直接添加结点1即可。

例如:9998+932= 9998+0932=10930,模拟计算过程

1.初始准备工作

2.计算8+2的当前值以及进位值,更新结点位置

3.计算9+3的当前值以及进位值,更新结点位置

4. 计算9+9的当前值以及进位值,更新结点位置

5.计算L1中的最后一个9和L2补位的0的值以及进位的值

6.遍历结束,上一位还留有进制位,补充新结点

7.最后返回dummy.next

 java代码:

 1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode() {}
7 * ListNode(int val) { this.val = val; }
8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * }
10 */
11 class Solution {
12 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
13 //设置一个虚拟结点
14 ListNode dummy = new ListNode(0);
15 //设置一个可移动指针,存储当前结点
16 ListNode cur = dummy;
17 //设置一个进位指针
18 int carry = 0;
19
20 while(l1 != null || l2 != null){
21 //取当前位的值,如果当前位空,就补0,保证两个整数的位数相同
22 int a =(l1 != null) ? l1.val : 0;
23 int b =(l2 != null) ? l2.val : 0;
24 int sum = a + b + carry;
25
26 //进位值
27 carry = sum / 10;
28 //当前位的值
29 sum %= 10;
30 //创建一个新的结点保存当前结点的值
31 cur.next = new ListNode(sum);
32 //链表结点后移
33 cur = cur.next;
34 //将两个链表往后移
35 if(l1 != null) l1 = l1.next;
36 if(l2 != null) l2 = l2.next;
37 }
38 //如果最后两个数相加有进位值,将进位数赋予新的结点
39 //结点值在0~9,故进位最多为1
40 if(carry == 1){
41 cur.next = new ListNode(carry);
42 }
43 return dummy.next;
44 }
45 }

 python3代码:

注意:pyhton3中:" / "表示浮点数除法,返回浮点float结果," // "表示整数除法,返回一个不大于" / "计算结果的最大整数int,故这里使用'//'。

 1 # Definition for singly-linked list.
2 # class ListNode:
3 # def __init__(self, val=0, next=None):
4 # self.val = val
5 # self.next = next
6 class Solution:
7 def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
8 dummy = ListNode(0)
9 cur = dummy
10 carry = 0
11 while l1 != None or l2 != None:
12 # 补0或者取本来的值
13 a = l1.val if l1 != None else 0
14 b = l2.val if l2 != None else 0
15 sum = a + b + carry
16
17 carry = sum // 10
18 sum %= 10
19
20 cur.next = ListNode(sum)
21 cur = cur.next
22 # 两链表后移
23 if l1 != None:
24 l1 = l1.next
25 if l2 != None:
26 l2 = l2.next
27
28 if carry == 1:
29 cur.next = ListNode(carry)
30
31 return dummy.next

力扣2(java&python)-两数相加(中等)的更多相关文章

  1. 力扣(LeetCode)两数相加 个人题解

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  2. 力扣 —— Two Sum ( 两数之和) python实现

    题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  3. Java解法-两数相加(Add Two Numbers)

    问题  给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...

  4. 我的第三个java程序 两数相加

    import java.util.Scanner; public class Test { public static void main(String [] args) { Scanner sc = ...

  5. 力扣 - 445. 两数相加 II

    目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...

  6. LeetCode02 - 两数相加(Java 实现)

    LeetCode02 - 两数相加(Java 实现) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 题目描述 ...

  7. LeetCode 2——两数相加(JAVA)

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  8. Java实现 LeetCode 2 两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  9. 两数相加(java版本)

    (一).单链表实现 package com.lin.leetcode.addTwoNumbers; /** * Created by Yaooo on 2019/8/26. */ public cla ...

  10. ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

随机推荐

  1. ubuntu环境下python下使用OpenCV库读取USB摄像头的画面

    一 概念 OpenCV是一个开源的计算机视觉和机器学习软件库.它可以使用pip命令行中的以下命令安装:"pip install opencv-python" 这个做视觉处理,非常的 ...

  2. Electron 开发过程中主进程的无法看到 console.log 输出怎么办

    开发过程中命令行工具(powershell.terminal)内无法看到 console.log 输出 Eelectron 的在开发过程中主进程 NodeJS 内往往需要 console.log 来进 ...

  3. uniapp踩坑记录

    sessionStorage.setItem('token', data.msg)uni.setStorage('token', res.data); 搞了半天登录后直接通过获取getstorage获 ...

  4. RabbitMq消息队列进一步认识

    参考:https://www.cnblogs.com/wanglijun/p/10896896.html(应用场景) https://blog.csdn.net/weixin_41588751/art ...

  5. .NET集成DeveloperSharp操作Sql Server数据库

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. 本文提供了一种结合"原生Sql+轻量级ORM"操 ...

  6. 记录--react native 封装人脸 检测、美颜组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本组件目前只能用在React Native 的iOS端 本组件来之实际中的开发需求:可以检测并且标记人脸,实现基本的美颜,可进行拍照.换行 ...

  7. 常用命令---less---more

    常用命令---less---more 常用选项 less 和 more 都是 Linux 和类 Unix 系统中的文本阅读工具,主要用于分页查看文件内容.虽然两者都能让用户逐屏查看大文件,但 less ...

  8. 鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)

    一.RelativeContainer 1.概述 ArkUI组件中的RelativeContainer是一个相对定位的容器,可以用来将子组件按照相对位置布局. 在RelativeContainer中, ...

  9. Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

    在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出Gaussian YOLOv3.该算法在保持实时性的情况下,通过高斯建模.损失函数重建来学习bbox预测值的不确定性,从而提高准确率 ...

  10. KGIS支持的扩展介绍

    1.postgis postgis的基本核心功能,仅支持地理图形(矢量要素),在其他Extension前启用. 2.postgis_raster 对栅格数据的支持. 3.postgis_topolog ...