一、解题思路
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
- carry:记录进制位
- 两个链表指针同时移动,对应的两数和carry相加得到sum
- parseInt(sum/10) 得到进制位carry的值
- parseInt(sum%10) 得到链表对应位的值
- 每一次循环结束时要将sum重置
/**
* 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) {
let result = new ListNode(0)
//result的操作指针
let cur = result;
let sum=0, carry = 0;
while (l1 || l2) {
//a??b a为null或undefined的时候返回b,相当于||,(思路相似)
//a?.b a为null或undefined的时候不执行b,相当于&&,(思路相似)
l1.val = l1.val || '0';
l2.val = l2.val || '0';
sum = Number(l1.val) + Number(l2.val) + carry
carry = parseInt(sum / 10); //进制位
sum = sum % 10; //val的值
let node = new ListNode(sum);
cur.next = node;
cur = node
l1 = l1.next
l2 = l2.next
//将sum重置
sum = 0
}
return result.next
};