コードは次のようになります。
public void deleteItem(int target)
{
int index = 0;
CarNode item = head;
CarNode prev = null;
while(item != null)
{
if (index == target) {
if (prev == null) {
head = item.getNode();
return; // We've removed the target.
} else {
prev.setNode(item.getNode());
return; // We've removed the target.
}
}
prev = item;
item = item.getNode();
index++;
}
}
それでは、これを分解しましょう:
int index = 0;
CarNode item = head;
CarNode prev = null;
2 つの変数が必要です。1 つは見ている要素を格納するためのもので、もう 1 つは前の要素を格納するためのものです (要素を削除したら、リストを再接続するために使用します)。まず、現在は頭であり、以前は存在しません。index
目標に到達したらお知らせします。
while(item != null)
null
ノードでマークされたリストの最後に到達するまで繰り返します。
if (index == target) {
if (prev == null) {
head = item.getNode();
return; // We've removed the target.
} else {
prev.setNode(item.getNode());
return; // We've removed the target.
}
}
ターゲットが見つかった場合は、それを削除します。previous が null の場合、ターゲットは頭だったので、頭を 2 番目の要素に移動します。それ以外の場合は、前のノードの参照を現在のノードの参照にします。これにより、現在のノードがリストから除外されます。ターゲットを削除したら完了なので、戻ります。
prev = item;
item = item.getNode();
index++;
以前のノードと現在のノードを更新します。どちらも 1 つのノードを進めます。インデックスがインクリメントされます。
図示された例はどうですか:
サイズ 3 のリストを取得します。次のようになります。
これで aとノードをlist.deleteItem(1);
インスタンス化します。最初のノードを指し、null です。prev
next
next
prev
ターゲットは 1 なので、次のノードに移動します。は、以前prev
指していたものを指し、リストの 2 番目のオブジェクト (削除したいオブジェクト)を指します。next
next
prev
ノードの参照をノードの参照に設定することで、これを削除しnext
ます。
メソッドから戻ると、Java ガベージ コレクションが機能し、次のものが残ります。
多田!ノードがリストから削除されました!