2016-05-05 14 views
0

私は単体リンクリストからオブジェクトを削除する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(); 
} 

答えて

1

ノードを削除するには、なぜヘッドポインタを変更していますか?前のノードを使用していて、削除するノードの次のノードを指している必要があります。

+0

私は理解しますが、どのように私は前のノードを参照することができますか? – girthquake

+0

これを保持する変数が必要です。たとえば、whileループが始まる前に、refがheadを指し、前のノードがないので、previousNode = null。ループの中で
'ref = ref.next'を実行すると、previousNodeをrefに設定すると、横断された各ノードの前のノードが参照されます –

関連する問題