|
题目
给你两个非空的链表,表示两个非负的整数
它们每位数字都是按照逆序的方式存储的
并且每个节点只能存储一位数字
请你将两个数相加,并以相同形式返回一个表示和的链表
你可以假设除了数字0之外,这两个数都不会以0开头
链表类
在函数中实现要求
规则示例
规则:
示例1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807
示例2:
输入:l1 = [0], l2 = [0]
输出:[0]
解释:0 + 0 = 0
示例3:
输入:l1 = [9, 9, 9, 9, 9, 9, 9], l2 = [9, 9, 9, 9]
输出:[8,9,9,9,0,0,0,1]
解释:9999999 + 9999 = 10009998
解题分析
我们以 352 + 56 举例分析
题目要求我们用两个链表相加得到一个新的链表,而链表中数字的顺序是从低位开始存储。刚好满足了我们做十进制加法的规则:从低位开始加
十进制加法的关键规则:
1.低位结果= (A + B + 上一位进位数) % 10
2.进位结果= (A + B + 上一位进位数) / 10
举例分析:
352 + 56
个位相加:
个位计算结果 = (2 + 6 + 上一位进位数0) % 10 = 8
个位进位结果 = (2 + 6 + 上一位进位数0) / 10 = 0
十位相加:
十位计算结果 = (5 + 5 + 上一位进位数0) % 10 = 0
十位进位结果 = (5 + 5 + 上一位进位数0) / 10 = 1
百位相加:
百位计算结果 = (3 + 0 + 上一位进位数1) % 10 = 4
百位进位结果 = (3 + 0 + 上一位进位数1) / 10 = 0
当L1和L2链表的下一位都是null
并且进位结果为0时
就证明我们不需要再往下计算了
于是得到结果:352 + 56 = 408
分步解题
第一步:声明用于返回的链表头节点以及用于计算的临时节点
第二步:通过上面的分析,每一位计算需要有上一位的进位数carry参与
第三步:构建计算每一位的循环
什么时候会不停计算?
L1还有节点 || L2还有节点 || 上一位有进位
第四步:进行每一位的计算
遵循十进制加法的关键规则:
1.低位结果= (A + B + 上一位进位数) % 10
2.进位结果= (A + B + 上一位进位数) / 10
<hr/>关注 唐老狮 获取更多干货内容 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|