继续刷LeetCode 热题 HOT 100 的题目,并且在博客更新我的solutions。在csdn博客中我会尽量用文字解释清楚,相关Java代码大家可以前往我的个人博客jinhuaiyu.com中查看。
时间:2022.1.5
题目:两数相加
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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
题目数据保证列表表示的数字不含前导零
solution:
在我考研入学专业课的时候也有一道类似的题目,那题还不是逆序。这个题目给的是逆序,也就是说可以直接从第一个节点开始合并l1和l2。我们初始化一个新链用来装结果,然后开始遍历两条输入链,相同位置的相加再加上进位值(初始为0),如果大于10就取余并且把进位值置为1,否则直接把进位值重置为0。用do while,判断条件是两条输入链当前遍历到的节点的next都非空。
当这轮遍历结束时,还有一条输入链可能没遍历完,如果此时进位值为0,则直接把没遍历完的输入链附到结果链后面;如果进位值此时为1,说明还要把这个1通过遍历剩下的输入链合并到结果链里。
思想上没什么弯弯绕绕,主要是一些地方要注意判断条件和特殊情况,比如要保存到结果链的首节点用于输出,如果把两条输入链全都合到结果链上后,进位值还是1,说明还没算完,要在结果链最后再加上一个值为1的节点。
Finally,代码放在我的个人博客http://jinhuaiyu.com/leetcode-add-two-numbers/
相关文章
- 10-18LeetCode 热题 HOT 100 第40天:“对称二叉树”
- 10-18Leetcode练习(Python):数组类:第167题:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中
- 10-18leetcode hot 100-2. 两数相加
- 10-18LeetCode 热题 HOT 100 1. 两数之和
- 10-18[LeetCode 热题 Hot 100] 1.两数之和
- 10-18LeetCode 面试必备100题:Add Two Numbers 两数相加
- 10-18LeetCode 热题 HOT 100 第14天:“合并K个升序链表”
- 10-18LeetCode热题100 1.两数之和
- 10-18LeetCode 热题 HOT 100 第26天:“合并区间”
- 10-18LeetCode 热题 HOT 100 第2天:“两数相加”