【leetcode算法-中等】2. 两数相加
【题目描述】
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
【解答】
- 解法:遍历链表
将两个链表看作相同长度,长度短的链表补0再相加,比如:123 + 23 = 123 + 023 = 146
初始化一个哑节点
对于这个哑节点可以这么理解:
· 我用的解法是将相加结果放到一个新的链表中,所以我初始化了一个新链表的头节点dummy
· 但是我们需要不断往新链表后面加节点,如果每加一个新的值,就让dummy = dummy.next,那么我们最后虽然完成了加法,却没办法将新链表返回,因为这时候找不到头节点,之前初始化的dummy节点,已经跑到了新链表的尾部
· 所以我们利用哑节点,再在哑节点后加一个用于接受sum的值的当前节点curr,完成加法后,只要返回dummy.next便可
· while循环刚开始那两个if-else判断的意思:如果 l1 = None(因为若上一个循环中 l1 是链表的尾部节点,而在循环的最后令 l1 = l1.next ,所以下一次循环时,l1 为None),那么None节点是不能拥有 self.val 的,所以若当前节点为None,令x = 0即可完成补0操作,这也是为什么要设置x、y来接收 l1.val 和 l2.val 的原因
# 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:
dummy = ListNode(0) #哑节点,防止头节点丢失
curr = dummy #当前节点
carry = 0 #进位值 while l1 != None or l2 != None:
# x存储 l1.val的值
# y存储 l2.val的值 if l1 == None:
x = 0
else:
x = l1.val
if l2 == None:
y = 0
else:
y = l2.val
sum = x + y + carry
carry = sum // 10
sum = sum % 10 #真正加上的值
curr.next = ListNode(sum)
curr = curr.next
if l1 != None:
l1 = l1.next
if l2 != None:
l2 = l2.next if carry == 1:
curr.next = ListNode(1)
return dummy.next
【leetcode算法-中等】2. 两数相加的更多相关文章
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- Leetcode(二)两数相加
两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- LeetCode题解002:两数相加
两数相加 题目 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- LeetCode 0、《两数相加》
一.给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- leetCode算法——1TwoSum(两数之和)
描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...
- 【LeetCode每日一题 Day 2】2. 两数相加
大家好,我是编程熊,今天是LeetCode每日一题的第二天,一起学习的是LeetCode第二题<两数相加>. 题意 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 ...
随机推荐
- xlrd/xlwt
操作 xls格式的excel文件 读模块 xlrd import xlrd 打开文件 wb= xlrd.open_workbook('xxxx.xls') 获取excel中的表 ws= wb.shee ...
- Gluon学习03-基础数据类型Ndarray
Gluon学习03-基础数据类型Ndarray 小书匠 kindle 目录,方便快速定位: 1.安装cuda与cudnn 2.安装mxnet-gpu 本机环境介绍: 系统:Linuxmint Pyt ...
- codeforces524E
题意:n*m的矩阵,给出k个点,Q次询问,问每个矩阵中每个点是否被看管,一个点被看管的定义是那个点所在的行或列有点,n,m<=1e5,k,q<=2e5 sol :发现行和列是独立的,即要么 ...
- python-ros No module named PyKDL
sudo apt-get install ros-indigo-kdl-parser-py http://debian.2.n7.nabble.com/Bug-913803-python3-pykdl ...
- NOIP1998提高组 题解报告
T1 进制位 题目大意:自己看吧 首先让我们来看两个引理: 如果有解,则进制一定为\(n - 1\) 如果有解,则字母一定表示\(0\) 至 \(n - 1\) 的数 证明如下: 因为有 \(n - ...
- hdu6468(记忆化搜索)
zyb的面试 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- meshing-缺角正方体
原视频下载地址:https://yunpan.cn/cqLyi92H5Akh5 访问密码 1d48
- java JSON的使用和解析
There is no royal road to learning. 博主:JavaPanda https://www.cnblogs.com/LearnAndGet/p/10009646.html ...
- 性能监控 | MAT分析内存泄漏
使用MAT分析内存泄漏(二)八周年重印版 - 知乎 .u-safeAreaInset-top { height: constant(safe-area-inset-top) !important; h ...
- centos上安装Python并修复yum
date: 2019-07-01 18:09:53 author: headsen chen notice: 个人原创 1,安装python3.7: yum install zlib-devel b ...