题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

题目描述

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入: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的问题

由于数字的位数不一定相等,所以链表的长度也不一定相等,需要在计算完链表共同相加的部分后,会有一条链表多出一部分,需要将多出的这部分连接到新的链表上去。

2、进位问题

这里设置了一个标志位作为进位,每次求和时候会加入标志位,并且求和完毕后更新标志位。

重做这道题的原因是当时在学习Python,所以使用了Python写了一遍这题,熟悉了一下Python的语法。

源码展示

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
root = ListNode(l1.val + l2.val)
root.next = None
fa = root
if root.val >= 10:
root.val = root.val % 10
jw = 1
else:
jw = 0
i = 1
p1 = l1.next
p2 = l2.next
while p1 != None and p2 != None:
if p1.val + p2.val + jw >= 10:
node = ListNode((p1.val + p2.val + jw) % 10)
jw = 1
else:
node = ListNode(p1.val + p2.val + jw)
jw = 0
fa.next = node
fa = node
p1 = p1.next
p2 = p2.next
i += 1
if p1 == None:
fa.next = p2
else:
fa.next = p1
p = fa.next
while jw == 1:
if p != None:
p.val += 1
if (p.val >= 10):
p.val = p.val % 10
else:
jw = 0
else:
p = ListNode(1)
p.next=None
fa.next=p
break
if p.next != None:
fa=p
p = p.next
else:
fa=p
p = None
return root

运行结果

LeetCode-2 两数相加题解的更多相关文章

  1. LeetCode 445——两数相加 II

    1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...

  2. Leetcode 002. 两数相加

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

  3. Leetcode 445. 两数相加 II

    1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...

  4. LeetCode 445. 两数相加 II(Add Two Numbers II)

    445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...

  5. LeetCode 2. 两数相加(Add Two Numbers)

    2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...

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

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

  7. Java实现 LeetCode 2 两数相加

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

  8. leetcode TOP100 两数相加

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

  9. 【LeetCode】两数相加

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

  10. leetcode 链表 两数相加

     两数相加     给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

随机推荐

  1. CBV如何添加装饰器?

    目录 一:CBV如何添加装饰器 1.CBV中django不建议直接给类的方法加装饰器 2.CBC添加装饰器的三种方法 3.CBV添加装饰器实战 一:CBV如何添加装饰器 1.CBV中django不建议 ...

  2. 周结之json补充、正则re模块、hashlib模块、logging模块

    周结 目录 周结 json补充 正则表达式 re模块 第三方模块的下载 request模块 办公自动化openpyxl模块 hashlib加密模块 subprocess模块 logging日志模块 j ...

  3. SQLMap进阶:参数讲解

    1.--level 5:探测等级 -level 5参数代表需要执行的测试等级为5,一共有5个测试等级1~5,可不加level,不加等级参数默认是1.SQLMap使用的Payload可以在xml/poy ...

  4. python安装与初识

    一.Linux基础 - 计算机以及日后我们开发的程序防止的服务器的简单操作 二.Python开发 http://www.cnblogs.com/wupeiqi/articles/5433893.htm ...

  5. APP兼容测试点与WEB兼容测试点

    APP兼容测试点 WEB兼容测试点

  6. Jmeter之逻辑控制器---while控制器

    while控制器与编程语言中的while语句一样,当条件为真时继续执行,不为真时则跳出while循环体,不再执行. while控制器相对于循环控制器来说多了个条件判断,下面为while控制器使用案例. ...

  7. [OpenCV实战]27 在OpenCV下使用forEach进行并行像素访问

    目录 1 Mat像素访问 1.1 使用at方法直接进行像素访问 1.2 使用指针进行像素访问 1.3 使用forEach方法进行像素访问 1.4 将forEach与C ++ 11 Lambda一起使用 ...

  8. linux硬盘分区挂载

    这里使用手动挂载方式,还有其他挂载方式请百度 检查网站的磁盘状态,确认是否有没有分区的磁盘. fdisk -l 如图所示,这个服务器有两个硬盘第一个299.0G,第二个20000.0G.这种情况说明硬 ...

  9. 一文了解 Dubbo 3 配置工作原理

    以下是一个 Dubbo 属性配置的例子 dubbo-spring-boot-samples ## application.properties # Spring boot application sp ...

  10. FalseSharing-伪共享

    1.CPU缓存 要了解什么是伪共享,首先得了解CPU缓存架构与缓存行的知识 (1)<CPU缓存架构> 主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相 ...