给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
解题思路:
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
该题用到了链表这一数据结构,上述代码为其构造函数。因为是构造函数,所以创建一个新节点要以 new 的方式创建。
node = new ListNode(element, node)
所以该题的解题思路大致为利用 双指针 逐个指向实参的每一个数字并将其相加,并用一个变量储存是否存在进位。再把每次相加的结果对 10 取余,构造一个新链表节点并将其作为当前节点的 next 节点。注意最后需要判断最后一次运算是否存在进位,若存在进位则需要再添加一个节点。
let carry = 0; //进位
let sum = 0;
let ans = null;
let ANS = null;
while (l1 || l2) {
const temp1 = l1 ? li.val : 0;
const temp2 = l2 ? l2.val : 0;
if (temp1 + temp2 + carry >= 10) {
sum = temp1 + temp2 + carry - 10;
carry = 1;
} else {
sum = temp1 + temp2 + carry;
carry = 0;
}
if (!ANS) {
ANS = ans = new ListNode(sum);
} else {
ans.next = new ListNode(sum);
ans = ans.next;
}
if (l1) {
l1 = l1.next;
}
if (l2) {
l2 = l2.next;
}
}
if (carry === 1) {
ans.next = new ListNode(1);
}
return ANS;