![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/af7d5a10a5bfc149b43fce71d1d7aaab.png)
解题思路
- 创建一个carry变量存储节点相加的进位。
- 通过while循环将两个链表的节点同进位依次相加,然后将获得的 sum % 10后赋值给新创建的节点。
- 当遍历结束后,判断是否有剩余的carry或者链表。有的话继续让carry和链表进行计算。计算后将剩余的链表直接加到start节点的后面
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
const res = new ListNode();
let start = res;
let carry = 0;
while (l1 && l2) {
let sum = l1.val + l2.val + carry;
carry = sum > sum % 10 ? 1 : 0;
start.val = sum % 10;
l1 = l1.next;
l2 = l2.next;
if (l1 && l2) {
start.next = new ListNode();
start = start.next;
}
};
if (!l1 && !l2) {
if(carry){
start.next = new ListNode(1);
}
return res;
}
start.next = new ListNode();
start = start.next;
const residue = l1 ? l1 : l2;
let __residue = residue;
while (__residue && carry) {
let sum = __residue.val + carry;
carry = sum > sum % 10 ? 1 : 0;
__residue.val = sum % 10;
if (!__residue.next && carry) {
__residue.next = new ListNode(carry);
break;
}
__residue = __residue.next;
}
start.val = residue.val;
start.next = residue.next;
return res;
};