JS 链表求和

JS的链表,必须先定义一个常量,再定义一个变量等于这个常量,然后变量=变量.next 才能指向next。
第一次用JS写链表,一直用let创建一个新的链表,然后输出一直为null,百度看了看别人写的,这才知道需要先定义一个常量的链表。
下面第一种是没考虑到js数最大为2 53次的情况,很简单的先相加算出总和再形成新的链表

	  /**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    let a1=0;
    let a1Length=1;
    let a2=0;
    let a2Length=1;
    while(l1){
        a1+=l1.val*a1Length;
        a1Length*=10;
        l1=l1.next;
    }
    while(l2){
        a2+=l2.val*a2Length;
        a2Length*=10;
        l2=l2.next;
    }
    let all=a1+a2;
    const list=new ListNode();
    let back=list;
    while(all>0){
        back.val=(all%10);
        all=parseInt(all/10);
        if(all>0){
            back.next=new ListNode();
            back=back.next;
        }
    }
    return list;
};

第二种是正确写法:

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    const listNode = new ListNode(0);
    let curNode = listNode;
    while (l1 || l2) {
    	//如果l1 l2存在,就加上l1 l2对应的val值以及本来的val
        const sum =(l1 && l1.val) + (l2 && l2.val) + curNode.val;
        curNode.val = sum % 10;
        //如果加起来大于10,进位1先赋值给next.val
        curNode.next = new ListNode(sum > 9 ? 1 : 0);
        //如果到链尾了,.next为空
        if (!(l1 && l1.next) && !(l2 && l2.next) && sum < 10)
            curNode.next = null;
        curNode = curNode.next;
        //不然不为空,指向.next
        l1 = l1 && l1.next;
        l2 = l2 && l2.next;
    }
    return listNode;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值