【LeetCode】002. Add Two Numbers

javascript 解法:

var addTwoNumbers = function(l1, l2) {
    var node1,node2;
    var val ,pre = 0;
    var head = true;
    var HEAD ;
    // 确保 node1,与 node2 有值
    for( node1 = l1,node2 = l2; node1.hasOwnProperty("val") || node2.hasOwnProperty("val") || pre ;node1= node1.next || {},node2 = node2.next|| {} ){

        val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        // console.log(val,pre)
        // 形成链表
        if(head){
            HEAD = new ListNode(val);
            head = false;
            lastNode = HEAD;
            continue;
        }
        lastNode.next = new ListNode(val);
        lastNode = lastNode.next;
    }
    //处理单节点链表
    if(head){
        val = ((l1.val || 0)+ ( l2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        HEAD = new ListNode(val);
        if(pre){
            HEAD.next = new ListNode(pre);
        }
    }
    return HEAD;
};

下面的话,都是错的。是我没能理解题意。代码保留,供有需要的人,对比学习。


      这一题的话,本质不难。但我使用的JavaScript有点麻烦。首先,在节点的定义上,原题给的就是一个错误的定义,不能使用。修改定义后,发现题目的测试案例又不是用的定义给的,而是用数组代表这个链表。这个跟原题意,使用链表的解法完全不是同一个难度等级。
      最后,提交问题。本地一直是成功的,但到了提交平台上,一直返回了undefined ,像是对函数内部进行了异步调用。

数组解法:

var addTwoNumbers = function(l1, l2) {
   var result = [];
   for(var i = 0 ,pre = 0; i<l1.length || i<l2.length || pre; i++){
       result.push( ( (l1[i]||0) + (l2[i]||0) + pre )%10 );
       pre = Math.floor( ( (l1[i]||0) + (l2[i]||0) + pre)/10 );
       if( i>=l1.length-1 && pre ==0){
           return result;
       }
   }
   // return result;
};

链表解法: 包含节点定义的修改

function ListNode(val) {
    var aa = {};
    aa.val = val;
    aa.next = null;
    return aa;
}

var addTwoNumbers = function(l1, l2) {
    var node1,node2;
    var val ,pre = 0;
    var head = true;
    var HEAD ;
    // 确保 node1,与 node2 有值
    for( node1 = l1,node2 = l2; node1.next || node2.next || pre ;node1= node1.next || 1,node2 = node2.next|| 1 ){

        val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        console.log(val,pre)
        // 形成链表
        if(head){
            HEAD = ListNode(val);
            head = false;
            lastNode = HEAD;
            continue;
        }
        lastNode.next = ListNode(val);
        lastNode = lastNode.next;
    }
    return HEAD;
};

链表解法测试案例:

var l1 = ListNode(2);
l1.next = ListNode(4)
l1.next.next = ListNode(3)


var l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)

// console.log(addTwoNumbers(l1,l2));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值