力扣2(java&python)-两数相加(中等)
题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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)-两数相加(中等)的更多相关文章
- 力扣(LeetCode)两数相加 个人题解
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- 力扣 —— Two Sum ( 两数之和) python实现
题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...
- Java解法-两数相加(Add Two Numbers)
问题 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
- 我的第三个java程序 两数相加
import java.util.Scanner; public class Test { public static void main(String [] args) { Scanner sc = ...
- 力扣 - 445. 两数相加 II
目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...
- LeetCode02 - 两数相加(Java 实现)
LeetCode02 - 两数相加(Java 实现) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 题目描述 ...
- LeetCode 2——两数相加(JAVA)
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 两数相加(java版本)
(一).单链表实现 package com.lin.leetcode.addTwoNumbers; /** * Created by Yaooo on 2019/8/26. */ public cla ...
- ✡ 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 ...
随机推荐
- Android 快速实现View的展开和收缩效果
原文: Android 快速实现View的展开和收缩效果 - Stars-One的杂货小窝 看到一篇文章用到了一个布局的属性animateLayoutChanges就能实现展开和收缩效果,特意记录一下 ...
- Android Studio导出APP的数据库db文件
原文地址:Android Studio导出APP的数据库db文件 | Stars-One的杂货小窝 最近项目开发需要使用到Android内置的Sqlite存数据,但是公司里没有对应的调试环境,只能让现 ...
- 新服务器搭建docker跑mysql+java项目
参考:https://js.work/posts/1362ba443b35d(yum安装java17) 踩了两个坑,一个前面的conf文件里监听80的配置没有删除掉,一个项目配置里面的路径还在用服务器 ...
- Android热点SoftAP使用方式
一.背景 最近项目中Android设备需要获取SoftAP信息(wifi账号.密码.IP等),然后传递到投屏器中,那么如何获取到SoftAP信息呢?我们知道可以通过WifiManager类里的方法可以 ...
- Android中同步类Mutex(AutoMutex)与Condition
在Android中,封装的同步类主要有Mutex(AutoMutex)与Condition. 这两个类在android中被大量的使用,这也说明这两个类是非常重要的. 一.Mutex(AutoMutex ...
- java 手动生成jni头文件(JNI静态注册)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- FreeRTOS教程6 互斥量
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...
- 【Leetcode】63. 不同路径 II
题目(链接) 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...
- 【LeetCode刷题】239.滑动窗口最大值
239.滑动窗口最大值(点击跳转LeetCode) 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位. ...
- 利用Python 去重聚合Excel数据并对比两份数据的差异
问题背景 在数据处理过程中,常常需要将多个数据表进行合并,并进行比对,以便找出数据的差异和共同之处.本文将介绍如何使用 Pandas 库对两个 Excel 数据表进行合并与比对,并将结果输出到新的 E ...