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

本文探讨了一种解决链表相加问题的算法。首先尝试将链表转换为整数,但由于可能溢出,于是采用逐位相加并处理进位的方法。代码中提供了两种实现,一种是尝试直接转换为整数,另一种是逐位相加的正确解决方案。该算法适用于处理两个链表表示的数值相加的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

在这里插入图片描述

二、解题思路

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

三、代码实现

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
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值