题目:

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

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

你可以假设除了数字 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. Android 快速实现View的展开和收缩效果

    原文: Android 快速实现View的展开和收缩效果 - Stars-One的杂货小窝 看到一篇文章用到了一个布局的属性animateLayoutChanges就能实现展开和收缩效果,特意记录一下 ...

  2. Android Studio导出APP的数据库db文件

    原文地址:Android Studio导出APP的数据库db文件 | Stars-One的杂货小窝 最近项目开发需要使用到Android内置的Sqlite存数据,但是公司里没有对应的调试环境,只能让现 ...

  3. 新服务器搭建docker跑mysql+java项目

    参考:https://js.work/posts/1362ba443b35d(yum安装java17) 踩了两个坑,一个前面的conf文件里监听80的配置没有删除掉,一个项目配置里面的路径还在用服务器 ...

  4. Android热点SoftAP使用方式

    一.背景 最近项目中Android设备需要获取SoftAP信息(wifi账号.密码.IP等),然后传递到投屏器中,那么如何获取到SoftAP信息呢?我们知道可以通过WifiManager类里的方法可以 ...

  5. Android中同步类Mutex(AutoMutex)与Condition

    在Android中,封装的同步类主要有Mutex(AutoMutex)与Condition. 这两个类在android中被大量的使用,这也说明这两个类是非常重要的. 一.Mutex(AutoMutex ...

  6. java 手动生成jni头文件(JNI静态注册)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. FreeRTOS教程6 互斥量

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  8. 【Leetcode】63. 不同路径 II

    题目(链接) 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  9. 【LeetCode刷题】239.滑动窗口最大值

    239.滑动窗口最大值(点击跳转LeetCode) 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位. ...

  10. 利用Python 去重聚合Excel数据并对比两份数据的差异

    问题背景 在数据处理过程中,常常需要将多个数据表进行合并,并进行比对,以便找出数据的差异和共同之处.本文将介绍如何使用 Pandas 库对两个 Excel 数据表进行合并与比对,并将结果输出到新的 E ...