2016-10-05 9 views
1

リンクリストから特定のノードを削除しようとしています。なぜ私のコードがうまくいかないのかわかりません。何かヒント?リンクリストからのノードの削除

public void delete (int k) { 
    //[ 11 21 31 41 ].delete(2): expected=[ 11 21 41 ] 
    if (k < 0 || k >= N) throw new IllegalArgumentException(); 

    for(Node x = first; x != null; x = x.next) { 
     //deletes node 
     if(x.item == k){ 
      x = x.next; 
     } 
     if(x.item <= k){ 
      x = x.next.next; 
     } 
    } 


} 

誰かが私に言うことができる理由ですしてください。 だから私は[11,21,31,41]を持っているし、彼らは、このケース31には、インデックス2のノードを削除するために私を求めているこれまでのところ、私はこれを持っていますこれはうまくいかない?ありがとう

+0

を修正することができ、いくつかのサンプルコード?それとも、要素を削除しないだけですか? – denis

+0

それは要素をまったく削除していません... – Hello

+1

削除するノードの次のノードに前のノードの次の値を設定する必要があります(単一リンクリストの場合) – Zarwan

答えて

0

次のようにノードを移動することができますk回。一時的なintと前のノードを格納します。 next()に電話するたびに一時的な整数を減らしてください。 0(必要な要素)になったら、前のノードの次のポインタをxの次のポインタに設定して削除し、xnullに設定します。

あなたのコードでは、ポインタが設定されている部分がないと思います。例えば

(1) -> (2) -> (3) 

(2)を削除するには、(1).next = (3)(2) = nullセット。ここで間違って行く物事のカップルがあります

(1) -> (3) 
0

、と私はあなたが開発として、より良い問題を理解するためにいくつかのprintlnデバッグで作業することをお勧めします:これは、取得します。 itemフィールドを想定し

  1. は、ノード(例えばx.item == k)とのインデックスへのノードの値を比較している、ノードの値です。あなたがフォローしたいとしている

  2. 一般的なロジックは、ある「反復子が指しているノードは、私のリスト内の次のノードである場合、そのnextに私のnextを設定します。」

0

コードでは、渡されたインデックスとノードの値を比較しています。この比較では、ノード内のインデックスが常に値よりも小さくなります。それ以降も、コードが正しいと仮定してノードを更新していません。

コードの下に結果が表示されます。

public void delete (int k) 
{ 
//[ 11 21 31 41 ].delete(2): expected=[ 11 21 41 ] 
if (k < 0 || k >= N) throw new IllegalArgumentException(); 
int count = 0;//Assuming index starts from 0 
Node prev; 
for(Node x = first; x != null; x = x.next) 
{ 
    //deletes node 
    count++; 
    if(count<k) 
    { 
     prev = x; 
     continue; 
    } 
    else 
    { 
     prev.next = x.next; 
     x.next = null; 
     break; 
    } 

} 
if(count>k || count<k) 
{ 
    System.out.println("No element with index k"); 
} 
} 
0

@vaseは、あなたがのインデックスへのノードの値は、ノードを言っ を比較しているノードの値を項目欄をされると仮定すると、

を言って正しい(egxitem == k)。

あなたが取得エラーです何この

public void delete(int k){ 
    Node n = first; 
    for(int i = 0; i < k-1; i++){ // this loop finds the node right before the 
    n=n.next;     // index to use to delete the desired index. 
} 
    n.next = n.next.next; // delete command 
} 
関連する問題