力扣第2题: 两数相加
思路: 本题求两个单链表的和
链表只能模拟多位数字,不适用加法规则
而链表节点符合加法规则
所以遍历整个链表,取出节点数值,相加后再构造成链表
单链表只能单向遍历,本题中恰好是从个位
单链表可以由头节点表示,遍历到尾节点后无法表示,所以要留头
代码: 先创建虚假链表头
然后遍历两个单链表
从个位取出链表的值
求节点值的和并分割成个位和进位
把个位构造成链表节点并连接到假头上,进位留着下次循环使用
所有指针后移一位,本次循环结束
done。
var addTwoNumbers = function (l1, l2) {
let dummyHead = new ListNode(0)
let cur = dummyHead
let carry = 0
let x = 0
let y = 0
let sum = 0
let val = 0
while (l1 !== null || l2 !== null || carry !== 0) {
x = l1 ? l1.val : 0
y = l2 ? l2.val : 0
sum = x + y + carry
carry = Math.floor(sum / 10)
val = sum % 10
cur.next = new ListNode(val)
cur = cur.next
l1 = l1 ? l1.next : l1
l2 = l2 ? l2.next : l2
}
return dummyHead.next
};