网络异常,图片无法展示
|
「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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
- 题目数据保证列表表示的数字不含前导零
解题思路如下:
- 创建虚拟头节点用来返回结果链表
- 创建
num
变量记录之前节点的和值的进位数值 - 当传入链表至少一个不为空的时候,遍历链表,得到当前循环的和值
sum = (l1?li.val:0) + (l2?l2.val:0) + num
- 根据
sum
创建下一个节点 `new ListNode(sum%10) - 记录进位数值
num = Math.floor(sum/10)
- 将结果链表、
l1
、l2
走向后走一位(如果某个链表为空,则指向null
) - 当两个链表都为空后,判断此时进位数值是否不为零,如果不为零,则根据进位数值节点连接到结果链表末尾
- 返回结果链表的头节点
说明: 根据题意可知链表节点的值为 0~9
,则 sum
的值为 0~18
,所以 num
非 0
即 1
代码如下:
var addTwoNumbers = function(l1, l2) { const vhead = new ListNode(0); let num = 0, cur = vhead; while(l1||l2){ const sum = (l1?l1.val:0)+(l2?l2.val:0)+num; cur.next = new ListNode(sum%10) num = Math.floor(sum/10); cur = cur.next; l1 = l1?l1.next:null; l2 = l2?l2.next:null; } if(num) cur.next = new ListNode(num); return vhead.next; }; 复制代码
至此我们就完成了 leetcode-2-两数相加
如有任何问题或建议,欢迎留言讨论!