1 回答

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 的臨時節點將被垃圾回收,因為一旦函數返回(是局部變量) ,就沒有變量再引用它。
添加回答
舉報