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