两数相加[中等][链表]

101 阅读1分钟

题目 2. 两数相加 - 力扣(LeetCode) (leetcode-cn.com)

image.png

思路

这道题考察加法模拟和链表的遍历,用count来表示加法操作的进位,用sum来表示此位的加法运算结果。

循环条件是 count不为0(表示有进位) || l1 链表上尚有数字 || l2链表上尚有数字,此时就可以继续进行加法运算。通过new ListNode 创建新节点, 然后不断让newNode指向最新的节点。

注意点:

  1. 需要用head的Node节点来存储head.next,即结果链表的第一个节点的指针,从而可以返回结果。
  2. 循环条件的设定
  3. 每轮的val1 val2值的设定,根据l1 l2 是否存在进行判断
  4. 注意将l1 l2的指针进行右移
var addTwoNumbers = function(l1, l2) {
    let count = 0, sum = 0
    let head = new ListNode(0)
    let newNode = head
    while(count || l1 || l2){
        let val1 = l1 === null? 0 : l1.val
        let val2 = l2 === null? 0 : l2.val
        sum = count + val1 + val2
        newNode.next = new ListNode(sum%10)
        newNode = newNode.next
        count = Math.floor(sum/10)
        l1 = l1 === null? null : l1.next
        l2 = l2 === null? null : l2.next
    }
    return head.next
};