给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
7 -> 2 -> 4 -> 3
5 -> 6 -> 4
_________________
7 -> 8 -> 0 -> 7
解题思路
从示例1可以看出链表越靠后,位数越小,那么在做加法时,都是从小位数往大位数做加法。 由于链表只能从前往后遍历,我们可以将两个链表做反转,这样就可以达到我们想要的效果了
var addTwoNumbers = function(l1, l2) {
let pre1 = reverse(l1);
let pre2 = reverse(l2);
let cur = null;
let carry = 0;
while (pre1 || pre2) {
let sum = Number(pre1 ? pre1.val : 0) + Number(pre2 ? pre2.val : 0) + carry;
carry = Math.floor(sum / 10);
sum = sum % 10;
cur = new ListNode(sum, cur)
pre1 = pre1 ? pre1.next : null;
pre2 = pre2 ? pre2.next : null;
}
if (carry) cur = new ListNode(carry, cur);
return cur
};
var reverse = function (head) {
let pre = null, cur = head;
while (cur) {
let next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}