修改的curr
值像你這樣:
curr= next.next;
將不會更改列表本身,因爲curr
只是一個本地引用,改變引用不會改變它指向的內容。
如果您希望更改生效,您需要修改引用指向的對象的內容。
在你的情況的情況如下:
... -> prev -> curr -> next -> next.next -> ...
如果next
有你的價值,你想prev
直接指向next
,其實從列表中像這樣除去curr
:
... -> prev -> next -> next.next -> ...
這意味着您要更改prev
,因此它指向next
而不是curr
。
因此,在你的代碼,你需要引入prev
變量並管理的特殊情況時,刪除的節點是啓動本身:
startNode -> node2 -> node3 -> ...
有可能成爲:
node2 (the new start node) -> node3 -> ...
這是我如何修改代碼:
public void RemoveBefore(int nodeValue)
{
Node curr = start;
Node previous = null;
while (curr != null)
{
Node next = curr.next;
if (next!= null && next.nodeValue == nodeValue)
{
if(previous == null) {
start = next; // change directly the start of the list
} else {
previous.next = next; // point to next instead of curr
}
return;
}
previous = curr;
curr = curr.next;
}
}
如果你寫了這段代碼,你就足夠回答你的問題了自。 – Dici