這段代碼真正在做的是將下一個節點複製到給定節點中。最終效果就好像當前節點被刪除,但實際上它只是被下一個節點覆蓋。
也就是說,說你在這個列表中刪除B
:
A -> B -> C -> D
結果列表如下:
+------+
A -> B(Ccopy) ---+ C -+-> D
現在你不能做這個節點D
因爲有沒有下一個要複製的節點。
爲什麼我不能只是說,檢查身體前的方法檢查n.next是否等於null,如果是,只需將n設置爲null並返回true?我有什麼理由不能這樣做?
將n
設置爲null將不會執行任何操作。 n
只是對被刪除的列表節點的引用。如果您更改n
,則實際上不會更改列表中的任何內容。例如,假設您想要刪除該列表中的D
。它看起來像這樣:
n
|
v
A -> B -> C -> D
如果設置n
爲null,最終的結果是這樣的:
n---> null
A -> B -> C -> D
注意:並沒有在名單上變。
在這種情況下刪除D
的唯一方法是將C.next
修改爲指向null。也就是說,你想這樣:
+----> null
A -> B -> C --+ D
這需要修改C
,雖然,在單鏈表,你有沒有簡單的方法來從D
訪問C
。您必須從列表的開頭搜索,直到找到節點x
,例如x.next == D
。