给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
输入: l1 = [7,2,4,3], l2 = [5,6,4]
输出: [7,8,0,7]
示例2:
输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [8,0,7]
示例3:
输入: l1 = [0], l2 = [0]
输出: [0]
题解:
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function (l1, l2) {
const l1Stack = [], l2Stack = [];
while (l1) {
l1Stack.push(l1.val)
l1 = l1.next
}
while (l2) {
l2Stack.push(l2.val)
l2 = l2.next
}
let res = 0;
let node = null
// res > 0 是对while多增加一次循环 防止进位未进入链表
while (l1Stack.length || l2Stack.length || res > 0) {
let l1Res = l1Stack.length ? l1Stack.pop() : 0
let l2Res = l2Stack.length ? l2Stack.pop() : 0
let value = l1Res + l2Res + res
res = parseInt(value / 10) // 进位值
value = value % 10 // 当前值
const curNode = new ListNode(value);
curNode.next = node //向链表前插入新节点
node = curNode
}
return node
};
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。