亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我有一個關于這個鏈表合并代碼如何工作的快速問題

我有一個關于這個鏈表合并代碼如何工作的快速問題

滄海一幻覺 2023-06-09 17:20:26
我對 head.next 如何返回整個列表而不是下一個值感到困惑,例如下面的代碼中的 l1,l2,dummy .next。特別是我想知道 head.next 如何返回整個排序數組并跳過在第二行輸入的 -1 值。let mergeTwoLists = function (l1, l2) {  let dummy = new ListNode(-1);  let head = dummy;  while (l1 !== null && l2 !== null) {    if (l1.val <= l2.val) {      dummy.next = l1;      l1 = l1.next;    } else {      dummy.next = l2;      l2 = l2.next;    }    dummy = dummy.next;  }  if (l1 !== null) {    dummy.next = l1;  } else {    dummy.next = l2;  }  return head.next;};class ListNode {  constructor(val = null, next = null) {    this.val = val;    this.next = next;  }}
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

可視化列表的構建方式可能會有所幫助:


讓輸入是一個列表,其中包含值 [3, 9] 和另一個只有 [4] 的列表:


 l1

 ↓

 3 → 9 → null


 l2

 ↓

 4 → null

在循環開始之前創建一個新節點:


head

 ↓

-1

 ↑

dummy

循環將進行第一次迭代,并且if條件為真。首先dummmy.next是適配,導致出現這種情況:


head l1

 ↓   ↓

-1 → 3 → 9 → null

 ↑

dummy    


 l2

 ↓

 4 → null

...然后l1重新分配一個新的參考:


head     l1

 ↓       ↓

-1 → 3 → 9 → null

 ↑

dummy    


 l2

 ↓

 4 → null

循環中的最后一條語句為 分配了一個新引用dummy:


head     l1

 ↓       ↓

-1 → 3 → 9 → null

     ↑

    dummy    


 l2

 ↓

 4 → null

循環第二次迭代,if現在條件為假,所以我們進入else代碼塊。Firstdummmy.next被改編(這打破了它與 的鏈接l1,所以我移動了l1和的可視化l2):


head     l2

 ↓       ↓

-1 → 3 → 4 → null

     ↑

    dummy    


 l1

 ↓

 9 → null

...然后l1重新分配一個新的引用,在這種情況下它變成null:


head          l2

 ↓            ↓

-1 → 3 → 4 → null

     ↑

    dummy    


 l1

 ↓

 9 → null

循環中的最后一條語句為 分配了一個新引用dummy:


head          l2

 ↓            ↓

-1 → 3 → 4 → null

         ↑

        dummy    


 l1

 ↓

 9 → null

在此階段,循環條件不再為真 ( l2is null),因此if執行循環后面的塊。這dummy.next與其余(不是null)參考鏈接。同樣,為了可視化,我交換了l1和的位置l2:


head         l1

 ↓           ↓

-1 → 3 → 4 → 9 → null

         ↑

        dummy    


 l2

 ↓

null

現在我們到了最后的聲明:return head.next。請注意headdid 從未離開在開始時創建的新節點。


所以返回的引用是:


head         l1

 ↓           ↓

-1 → 3 → 4 → 9 → null

     ↑

    returned    


 l2

 ↓

null

注意head在這個函數的整個執行過程中如何一直指向帶有 -1 的節點。head值為 -1 的臨時節點將被垃圾回收,因為一旦函數返回(是局部變量) ,就沒有變量再引用它。


查看完整回答
反對 回復 2023-06-09
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號