题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807.
解题思路
逆序排列,直接枚举两个链表,将两个链表值相加即可;考虑两数值相加大于9的情况;
假如变量sign表示两数值之和大于0;初始值为0;
举个例子:
| 链表1 | 5 | 6 | 4 | |
|---|---|---|---|---|
| 链表2 | 7 | 0 | 8 | |
| sign | 1 | 0 | 0 | |
| 结果 | 2 | 7 | 2 | 1 |
| 解释 | 这里5+7+sign = 12 > 9 所以 sign设置为1 | 6 + sign + 0 = 6 < 9 sign 设置为0 | 8+4+sign = 12 > 9 所以sign设置为1 | 0 + 0 + sign = 1 < 9 所以sign设置为0 |
得到结果2721
将每一步计算出来的结果放进一个链表中即可得到答案
代码
var addTwoNumbers = function (l1, l2) {
let root = new ListNode(-1)
let list = root
let sign = 0 //进位变量
while (l1 || l2 || sign) {
//保证l1.val有值
if (!l1) {
l1 = new ListNode(0)
}
//保证l2.val有值
if (!l2) {
l2 = new ListNode(0)
}
let n = l1.val + l2.val + sign
if (n >= 10) {
sign = 1
n = n - 10
} else {
sign = 0
}
list.next = new ListNode(n)
l1 = l1.next
l2 = l2.next
list = list.next
}
return root.next
}