两数相加

118 阅读1分钟

image.png
提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

解题思路:

此题难点在于是否需要进位

  • carry代表当前操作是否需要进位,初始为0代表不需要进位
  • dummy节点是一个虚拟的,放在链表最前面,指向头节点,具体查看链表相关
  • curr用来遍历,dummy属于是占位的
  • 当两两相加,判断如果两位相加小于10则直接放入链表next,如果大于等于10,则进行进位取余,余数放入,和数/10取整数赋值给carry进位再next

实现代码:

var addTwoNumbers = function(l1, l2) {
    let dummy = new ListNode();
    let curr = dummy;
    let carry = 0;
    while(l1 || l2) {
        let L1 = l1 ? l1.val : 0;
        let L2 = l2 ? l2.val :0;
        let sum = L1 + L2;
        curr.next = new ListNode((sum + carry) % 10);
        carry = Math.floor((sum + carry) / 10);
        curr = curr.next;
        if(l1) {
            l1 = l1.next;
        }
        if(l2) {
            l2 = l2.next;
        }
    }
    if (carry > 0) {
      curr.next = new ListNode(carry)
    }
    return dummy.next;
};