力扣2 两数相加

6 阅读1分钟

力扣第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
};