纪录一个关于内存拷贝(浅拷贝)和js链表的小知识点

1.开首引见

纪录一个做leetcode看答案学到的小学问。。。
浅拷贝完成一些特别的功用的一些运用场景

2.正文
比方:我们有一个需求以下

{
    val:0,
    child:null
}
//==>
{
    val:0,
    child:{
        val:1,
        child:{
            val:2,
            child:{
                ...
            }
        }
    }
}

我们能够如许做

    let obj1={
        val:0,
        child:null
    },
    obj2=obj1,
    i=1
    while(i<10){
        obj1.child={
            val:i,
            child:null
        };
        obj1=obj1.child
        i++
    }
    console.log("obj1:",obj1,"obj2:",obj2)//自行到控制台测试obj1:{val: 9, child: null},obj2:{val: 0, child: {…}}

由此我引伸一个,js怎样处理一个链表的问题,js链表的完成

问题在此:

给出两个 非空 的链表用来示意两个非负的整数。个中,它们各自的位数是根据 逆序 的体式格局存储的,而且它们的每一个节点只能存储 一名 数字。

假如,我们将这两个数相加起来,则会返回一个新的链表来示意它们的和。

您能够假定除了数字 0 以外,这两个数都不会以 0 开首。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
缘由:342 + 465 = 807

怎样完成:

function ListNode(val) {
    this.val = val;
    this.next = null;
}
var addTwoNumbers = function(l1, l2) {
    if(l1 === null || l2 === null){
        return l1 || l2;
    }
    
    var result = new ListNode(0);
    var cur = result;//细节操纵
    var p = l1;
    var q = l2;
    var carry = 0;
    
    while(p || q){
        var qval;
        var pval;
        
        if(q){
            qval = q.val;
            q = q.next;
        } else {
            qval = 0;
        }
        
        if(p){
            pval = p.val;
            p = p.next;
        } else {
            pval = 0;
        }
        
        var val = qval + pval + carry;
        
        if(val > 9){
            carry = 1;
            val %= 10;
        } else {
            carry = 0;
        }
        
        cur.next = new ListNode(val);
        cur = cur.next;
    }
    //这是carry大于1,申明凌驾位数了,比方99=>100,999=>1000,补一个1在末了。
    if(carry !== 0){
        cur.next = new ListNode(1);
    }
    
    return result.next;
    
};

ok👌,仅此自学纪录,假如不小心对你有协助,万分幸运!

    原文作者:VisionM
    原文地址: https://segmentfault.com/a/1190000018767444
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞