【leetcode】Day01 迷茫的两数相加

两数相加

今天早晨我充满信心的找到leetcode网站刷算法题,结果题库中的第二道题,描述是这样的
在这里插入图片描述
把我看傻了,加上本来因为不熟悉leetcode的刷题规则,让我折腾了好半天,我刚开始甚至一直再return这些参数和来看一下返回的值,最终还是去找了大神的解题语法,但是不幸看到了思路 今天的刷题其实挺失败的
然后我大概弄懂了之后开始思考这个解题思路了
首先 两个链表逆向存储一个数字,返回的链表需要是这个数字相加之后的逆序存储数字 我刚开始想直接收集逆序链表的字符串然后处理之后再依次加入到新链表中 但是太麻烦了 需要的代码肯定也不少 我这么一个懒人自然不能做那样的事情于是在看它的执行实例时看到了这张图
在这里插入图片描述

    2 -> 4 -> 3 
    5 -> 6 -> 4 +
    --------------
    7 -> 0 -> 8

这明显就是两个链表相同位置的值相加直接赋值给新链表不就ok了,于是乎大概思路已经从我脑子里跳了出来

  1. 声明新链表
  2. 遍历链表只要它的节点不为NULL
  3. 在遍历中 :
    1. 获得两数相加之和
    2. 两个链表指向下一个节点 .next
    3. 赋值给新链表
    4. 新链表 .next
  4. 返回新链表
function addTwoNumbers(l1,l2){
    var endNodeList = temp = new ListNode(null);
    while(l1!==null || l2!==null){
        var sum;
        sum = (l1 && l1.val)?l1.val:0;
        sum += (l2 && l2.val)?l2.val:0;
        sum += (temp.val)?temp.val:0;
        // 判断是否满十 满十说明p需要带1
        var isFull = Math.floor(sum/10);
        // 新链表值等于两数相加取余10 因为可能会有10的存在
        temp.val = sum %10;
        // 参数链表进位
        l1 = l1 && l1.next;
        l2 = l2 && l2.next;
        // 如果溢出带1进下次循环 不溢出再判断 l1与l2是否还存在 存在则带0 不存在不予复赋值否则影响结果
        (isFull ==1)?temp.next = {val : isFull}:(l1 || l2)?temp.next = {val : 0}: null;
        // p的链表更新
        temp= temp.next;
    }
    return endNodeList;
}

这里的sum加临时节点的内容是因为,临时节点整除10之后如果是1,那么它就是有用的,需要进一。每次赋值l1 && l1,val是因为会有两数长度不同的情况 如果长度不同说明有可能l1或l2可能为空所以先判断是否有l1再去取.val

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值