【LeetCode练习】2. 两数相加(中等|JS)

一、题目描述

在这里插入图片描述

二、解题思路

刚开始试了把链表数字转为整数,但溢出了,那只能逐位相加了,考虑进位即可

三、代码实现

1.转为整数(不可行)

var addTwoNumbers = function (l1, l2) {
    let l1num = 0, l2num = 0, l1n = 1, l2n = 1
    while (l1 != null) {
        l1num += l1.val * l1n
        l1n *= 10
        l1 = l1.next
    }
    while (l2 != null) {
        l2num += l2.val * l2n
        l2n *= 10
        l2 = l2.next
    }
    let resNum = (l1num * 10000 + l2num * 10000) / 10000
    let node = new ListNode(resNum % 10, undefined)
    let res = node
    resNum = Math.floor(resNum / 10)
    while (resNum / 10 != 0) {
        node.next = new ListNode(resNum % 10, undefined)
        resNum = Math.floor(resNum / 10)
        node = node.next
    }
    return res
};
  1. 逐位相加
var addTwoNumbers = function (l1, l2) {
    let carry = 0
    let res = new ListNode(0)
    let temp = res
    while(l1 != null || l2 != null){
        let n1 = l1 ? l1.val : 0
        let n2 = l2 ? l2.val : 0
        let sum = n1 + n2 + carry
        carry = Math.floor(sum / 10)
        temp.next = new ListNode(sum%10)
        if(l1 != null){
            l1 = l1.next
        }
        if(l2 != null){
            l2 = l2.next
        } 
        temp = temp.next
    }
    if(carry != 0){
        temp.next = new ListNode(1)
    }
    return res.next
};

版权声明:本文为weixin_40764047原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。