力扣2题 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:


输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.


示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]


示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

var addTwoNumbers = function(l1, l2) {
    let result = new ListNode(null);
    let point = result;
    let sum = 0;
    let carry = 0;
    while(l1 != null || l2 != null){
        let a = (l1 != null) ? l1.val : 0;
        let b = (l2 != null) ? l2.val : 0;

        sum = (a + b + carry) % 10;
        // 必须调用这个函数,不然做不了除法
        carry = Math.floor((a + b + carry) / 10);
        
        point.next = new ListNode(sum);
        point = point.next;

        if(l1 != null){
            l1 = l1.next;
        };

        if(l2 != null){
            l2 = l2.next;
        }
        
    }

    if(carry > 0){
        point.next = new ListNode(carry);
    };
    return result.next;
};

解题思路
如题讲述的那样,就是给我们两个链表,而且长度不一定是等长的,让我们进行加操作返回结果。示例1:2->4->3 + 5->6->4 = 7->0->9 ,就是正常每个链表一位一位相加,2+5=7,然后像4+6=10,只要是相加≥10的,我们就需要所谓的进位,所以我们就需要定义一个存储进位数的变量,只能是0或1,每次循环都要及时更新这个进位值,我们还需要定义一个变量存储我们的相加结果,每次循环都将我们的结果取余,没进位的就是结果本身,进位值就是0,有进位的最终结果就是个位数字(例如12取余就是2),进位值为1。定义一个新的链表,将每次的结果存储进去。当不同长度的链表时,将短的链表后面补0,补到跟另一个链表一样长。当最后以为都相加完之后,如果此时还是有进位的话,只需在新链表再向后指一次,将进位值存进去即可。

 

注意

JavaScript计算除法的方法:

  • 1、通过“Math.round(x)”实现除法并四舍五入;
  • 2、通过“Math.floor(x)”实现除法并向下舍入;
  • 3、通过“Math.ceil(x)”实现除法并向上舍入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值