私は単体リンクリストからオブジェクトを削除するremoveメソッドを作成しました。リンクされたリストから特定のノードを削除するにはどうすればよいですか?
これまでの方法では、第1ノードと第2ノードが問題なく削除されています。 3番目以降のノードを削除すると、このメソッドは指定されたノードとヘッドノードの間のすべてを削除します。私の質問は、どのように私のメソッドは、指定されたノードを削除する前にすべてのものを作ることができますか?
私は、次のノードを指定されたノードの次のノードに割り当てるために、前のノードへの参照を保持する必要があることを知っています。これにより、ギャップが閉じられ、ノードが削除されます。私はそのロジックを理解していますが、実装することはできません。
public class List_test{
public Node head;
public List(){
head = null;
}
public List(Node head_) {
this.head = head_;
Node ref = head;
}
public void remove(Node node) {
Node ref= head;
if (ref.equals(node)) {
head = head.next;
return;
}
while (ref != null) {
if (ref.equals(node)) {
head.next = node.next;
}
ref = ref.next;
}
}
public static void main(String[] args) {
new List_test();
}
私は理解しますが、どのように私は前のノードを参照することができますか? – girthquake
これを保持する変数が必要です。たとえば、whileループが始まる前に、refがheadを指し、前のノードがないので、previousNode = null。ループの中で
'ref = ref.next'を実行すると、previousNodeをrefに設定すると、横断された各ノードの前のノードが参照されます –