445. 两数相加 II
难度:Medium
掌握程度:Low
有两个栈,分布装两组不同的数,从尾部相加,但是最后为了避免反转列表,可以利用指针的指向来进行反转
var addTwoNumbers = function(l1, l2) {
const stack1 = [], stack2 = [];
while(l1 !== null){
#把数字push到栈里
stack1.push(l1.val);
l1 = l1.next;
}
while(l2 !== null){
stack2.push(l2.val);
l2 = l2.next;
}
let carry = 0, curr = null;
#因为有一个栈,比另外一个栈多出来一位数,所以可能到最后一个为空,一个不为空
while(stack1.length !== 0 || stack2.length !== 0){
let sum = 0;
if(stack1.length !== 0){
#两数相加,个位加个位.....
sum += stack1.pop();
}
if(stack2.length !== 0){
sum += stack2.pop();
}
sum += carry;
#这个是为了进位用的
const node = new ListNode(sum % 10);
carry = Math.floor(sum / 10);
node.next = curr;
curr = node;
}
if(carry !== 0 ){
const node = new ListNode(carry);
node.next = curr;
curr = node;
}
return curr;
};