首页 > 编程语言 >力扣2(java&python)-两数相加(中等)

力扣2(java&python)-两数相加(中等)

时间:2022-09-21 11:13:56浏览次数:75  
标签:结点 ListNode val python next l2 l1 java 两数

题目:

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

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

你可以假设除了数字 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

 

标签:结点,ListNode,val,python,next,l2,l1,java,两数
From: https://www.cnblogs.com/liu-myu/p/16714855.html

相关文章

  • JAVA诊断工具
    简介Arthas是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入......
  • java 动手动脑 方法重载
    如下代码://MethodOverload.java//UsingoverloadedmethodspackageHJssss;publicclasszhuce{ publicstaticvoidmain(String[]args){ System.out.printl......
  • python (),[], {}的含义
    1、python()表示元组,元组是一种不可变序列1)创建如:tuple=(1,2,3)取数据tuple[0]......tuple[0,2].....tuple[1,2]......2)修改元祖:元组是不可修改的3)删除元祖del......
  • 25. [实例]Python lxml应用
    1.前言本节通过编写一个简单的爬虫程序,进一步熟悉lxml解析库的使用。下面使用lxml库抓取猫眼电影Top100榜(点击访问),编写程序的过程中,注意与《Python爬虫抓取猫眼电......
  • java中IO流-缓冲流(字符型)复制操作
    importjava.io.*;publicclassBufferedTest{publicstaticvoidmain(String[]args){FileReaderfr=null;FileWriterfw=nul......
  • 使用 JavaScript 的 Glassmorphic 计算器
    使用JavaScript的Glassmorphic计算器大家好!欢迎来到编码扭矩.在本博客中,我将向您解释如何使用HTML、CSS和JavaScript制作Glassmorphic计算器。这将是一个分......
  • JAVA线段树模板
    publicclassLineTree{int[]tree,nums;intn;publicLineTree(int[]nums){this.nums=nums;n=nums.length;tree=newi......
  • 探索Java8:(五)Supplier和Consumer接口的使用
    Supplier是函数式编程的另一个接口,与Function、Predicate接口类似,区别在于Supplier不接收任何参数,只返回结果。Supplier的基本使用@FunctionalInterfacepublicinterfac......
  • java中IO流-缓冲流(字节型)复制操作
    importjava.io.*;publicclassBufferedTest{publicstaticvoidmain(String[]args){FileInputStreamfis=null;FileOutputStr......
  • 24. Python lxml库的安装和使用
    1.前言lxml是Python的第三方解析库,完全使用Python语言编写,它对Xpath表达式提供了良好的支持,因此能够了高效地解析HTML/XML文档。本节讲解如何通过lxml库解析H......