2016-04-12 21 views
0

私は、指定したインデックスのリンクリストからNodeを削除するremoveメソッドをゼロから作成しました。LinkedListでインデックスJavaを削除する

正しいノードが削除されていません。私はEclipseでデバッガを使いこなそうとしましたが、問題を捕らえられませんでした。

各ノードにトークンが含まれています。 私はTokenクラスNodeクラスを含んでいます。 Listクラスにメソッドを記述し、Testクラスを追加しました。

removeメソッドは、現在、指定されたインデックスの隣のノードを削除しています。 これを動作させるにはどうすればよいですか?長いポストのために私の謝罪。

public class thelist{ 

    public Node head; 

    public List() { 
     head = null; 
    } 

    public Node remove(int index) { 
     Node node= head; 
     for (int i = 0; i < index; i++) { 
      node= node.next; 
     } 
     node.next = node.next.next; 
     return node; 
    } 
+1

'ref.next = ref.next.next;'それは 'ref.previous.next = ref.next;'にする必要がありますか? –

答えて

3

問題があるのは、正しいインデックスになると、インデックスにあるノードではなく、NEXTノードを削除することです。正しいノードを見つけると、ref.previous.nextref.nextに設定することができます。従って、refを切り捨てる。

public Token remove(int index) { 
    if (index<0 || index >=size()) { 
     throw new IndexOutOfBoundsException(); 
    } 
    Node ref = head; 
    for (int i = 0; i < index; i++) { 
     ref = ref.next; 
    } 
    if (index == 0) { 
     head = ref.next; 
    } else { 
     ref.previous.next = ref.next; 
    } 
    size--; 
    return ref.getObject(); 
} 
+1

'index'が' 0'のときはエラーになります。 'head.previous'が' null'であると仮定します。 –

+0

'ref.next'がnullである最後のインデックス、または' ref.previous'もnullである最初のインデックスを削除しようとすると、これはNPEを取得するため、それらをチェックし、それに応じてそれらを処理する必要があります。 – NAMS

+0

はい、 'index'の' 0'は 'NullPointerException'をスローします。これは修正されました。しかし、最後のインデックスだった場合、 'ref.next'はnullを参照するだけで、nullのプロパティにはアクセスしないので、expectionをスローしません。 – EmptyArsenal

関連する問題