記錄一個關於內存拷貝(淺拷貝)和js鏈表的小知識點

1.開頭介紹web


記錄一個作leetcode看答案學到的小知識。。。
淺拷貝實現一些特殊的功能的一些應用場景測試


2.正文
好比:咱們有一個需求以下this

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

咱們能夠這樣作code

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鏈表的實現leetcode

題目在此:get

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。

若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。

您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。

示例:

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

如何實現:io

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👌,僅此自學記錄,若是不當心對你有幫助,萬分榮幸!console

相關文章
相關標籤/搜索