LUT のリンク リスト実装から特定のキーを持つノードを削除するメソッドを作成しようとしています。
私が書いたコードの要約:
public void delete (String k) {
Node currNode = listHead;
Node prevNode = listHead;
Key key = new Key (k);
while (!currNode.key.equals(k) && currNode != null){
prevNode = currNode;
currNode = currNode.next;
}
if (currNode == listHead) {
listHead = listHead.next;
} else {
prevNode.next = currNode.next;
}
}
私の友人は本質的に同じことを書きましたが、以前のノードポインタを使用せず、代わりに彼の最後の行として書きました:
currNode = currNode.next //detach point, override
これらはどちらも同等ですか?Javaメモリ管理について混乱していると思います。
ノードを別の場所にすでに作成している場合listHead
、次のように記述します。
Node currNode = listHead;
currNode
が保存されているメモリの場所への参照のみを保存していますlistHead
よね?そのため、while ループで でcurrNode = currNode.next
参照currNode
されているメモリ ロケーションに移動し、次に変数を見て、そのメモリ ロケーションへの参照をcurrNode
?に格納しています。したがって、基本的にどこcurrNode
を指しているかを更新します。これは私の友人のコードが間違っていたことを意味しますよね? 彼のコードは同様に「currNode
のメモリ位置で現在の参照を更新する」ことを意味するためcurrNode.next
です。
誰か霧を取り除くのを手伝ってくれませんか?