官方解
/**
* 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 head = null
let tail = null
let carry = 0 //进位
while(l1 || l2) {
const v1 = l1? l1.val : 0
const v2 = l2? l2.val : 0
// sum 为两数及前一次的进位相加
const sum = v1 + v2 + carry
if(!head) {
// 第一次head指向tail
head = tail = new ListNode(sum % 10)
} else {
tail.next = new ListNode(sum % 10)
tail = tail.next
}
carry = Math.floor(sum / 10)
// l1、l2指向下一位
if(l1) {
l1 = l1.next
}
if(l2) {
l2 = l2.next
}
}
// 最后一位相加完成 处理最后的进位
if (carry) {
tail.next = new ListNode(carry)
}
return head
};