2016-05-14 5 views
-1

これは、指定されたノード値を持つノードの前にノードを削除する方法ですが、どうしたらいいですか?指定されたノード値を持つノードの前にノードを削除するリンクされたリストメソッド

curr= next.next; 

があるため、リスト自体に変更を加えないだろう:例えば、1〜5は、(3)、それはあなたがやったようにcurrの値を変更する4.

public void RemoveBefore(int nodeValue) 
{ 
    Node curr = start; 

    while (curr != null) 
    { 
     Node next = curr.next; 

     if (next!= null && next.nodeValue == nodeValue) 
     {     
      curr= next.next;     
      return; 
     } 
     curr = curr.next; 

    } 
} 
+1

このコードを記述した場合は、自己。 – Dici

答えて

0

を削除しますRemoveBeforeを置きますcurrはちょうどローカルリファレンスであり、参照を変更してもそのリファレンスが指す内容は変更されません。

変更を有効にするには、参照によって指されたオブジェクトの内容を変更する必要があります。

... -> prev -> next -> next.next -> ... 
:あなたの価値を持っている

... -> prev -> curr -> next -> next.next -> ... 

next場合、あなたはそのようなリストからcurrを取り除く実際には、prevnextを直接指すようにしたい:あなたのケースで

は状況は以下のとおりです。

prevを変更してcurrの代わりにnextを指すようにすることを意味します。

だからあなたのコードの中であなたがprev変数を導入しても、削除するノードが開始そのものであるとき、特殊なケースを管理する必要があります。

startNode -> node2 -> node3 -> ... 

になるがあります

node2 (the new start node) -> node3 -> ... 

このコードを変更する方法は次のとおりです。

public void RemoveBefore(int nodeValue) 
{ 
    Node curr = start; 
    Node previous = null; 

    while (curr != null) 
    { 
     Node next = curr.next; 

     if (next!= null && next.nodeValue == nodeValue) 
     {     
      if(previous == null) { 
       start = next;   // change directly the start of the list 
      } else { 
       previous.next = next; // point to next instead of curr 
      } 
      return; 
     } 
     previous = curr; 
     curr = curr.next; 
    } 
} 
+0

しかし、私がそれに変更したとき、私は実行すると何も起こらない。 – Kevin

+0

はい回答を修正しました –

関連する問題