2016-06-16 11 views
1

Javaの単純なLinkedListの実装については、thisの記事を読んでいました。すべてがうまくいっていますが、メソッドを削除してください。
対応する要素を削除する必要があるということです。つまり、これは私の削除メソッドです。JavaでシンプルなLinkedListの自己実装

private Link head; 

public void remove(Object obj) { 
    if (task == null) 
     System.out.println("no"); 
    else { 
     Link linkCurr = head; 
     if (head != null) { 
      for (int i = 0; i < size; ++i) { 
       if (obj.equals(linkCurr.getData())){ 
        linkCurr.setNext(linkCurr.getNext().getNext()); 
        size--; 
        break; 
       } 
       linkCurr = linkCurr.getNext(); 
      } 
     } 
    } 
} 

これは、ノードとリンクのロジックを操作するクラスです。

private class Link 
{ 
    Link next; 

    Object data; 

    public Link(Object data) { 
     next = null; 
     this.data = data;   
    } 

    public Task getData() { 
     return data; 
    } 

    public Link getNext() { 
     return next; 
    } 

    public void setNext(Link next) 
    { 
     this.next = next; 
    } 
} 

ので、問題は、次のである - 私は(削除のパラメータとして設定することによって)リスト内の最初のOBJを削除する - それが消えますが、私は、第二またはいずれかを削除しようとした場合そうでなければ、私が望むものの次のものが削除されています。
私は助けていただきありがとうございます、事前に感謝します。より多くの情報が必要な場合は、私のLinkedList here!の完全なコードです。入力されたノードと一致するノードのためのリストを検索しているこれが何をやっている

Link linkCurr = head; 
    if (head != null) { 
     for (int i = 0; i < size; ++i) { 
      if (obj.equals(linkCurr.getData())){ 
       linkCurr.setNext(linkCurr.getNext().getNext()); 
       size--; 
       break; 
      } 
      linkCurr = linkCurr.getNext(); 
     } 
    } 

答えて

4

問題は、コードのこのセクションにあるように見えます。次に、そのノードのノード2への次のリンクをその行の下に設定し、隣接ノードを削除します。

あなたはおそらく、前のノードのインデックスを維持したい、そしてその上setnextを行っている、のようなもの:

Link linkCurr = head; 
    Link previous = null; 
    if (head != null) { 
     for (int i = 0; i < size; ++i) 
     { 
      if (obj.equals(linkCurr.getData())) 
      { 
       if (previous == null) 
       { 
        head = linkCurr.getNext(); // sets 2nd position to head of list 
        size--; 
        break; 
       } 
       previous.setNext(linkCurr.getNext()); // removes the node 
       size--; 
       break; 
      } 
      previous = linkCurr; 
      linkCurr = linkCurr.getNext(); 
     } 
    } 
+0

は、@Marshall Tigerus、ありがとうございました。あなたのメモは非常に良いです、私は非常に感謝しています。最後のものを除いてすべての要素に対して正常に機能します。私の例のように、task5は削除されず、さらにサイズも減少していません。これは、最後の要素を削除しようとすると、文の場合でも入力されていないことを意味します。 – Monstryyy

+0

forループで++ iの代わりにi ++に変更するか、i <= sizeに変更してみてください。それ以外の場合は、リストの最後の項目に反復しない可能性があります。 –

+0

ええ、すでにそれも見つかりました。固定の試みが残っています。とにかく、ありがとう、マーシャル。あなたはとても役に立ちました。がんばろう! – Monstryyy

関連する問題