2016-10-08 6 views
1

LinkedListから要素を削除する方法を明確にしたいと考えています。このコードが与えられて:インデックスのLinkedListからの要素の削除

public boolean remove(int index) 
{ 
    // if the index is out of range, exit 
    if(index < 1 || index > size()) 
     return false; 

    Node current = head; 
    for(int i = 1; i < index; i++) 
    { 
     if(current.getNext() == null) 
      return false; 

     current = current.getNext(); 
    } 
    current.setNext(current.getNext().getNext()); 
    listCount--; 
    return true; 
} 

私が見ることができますから、このコードは削除する前の要素で終わります。次に、削除するノードの次のノードに「次の」フィールドを割り当てます。私の質問は、削除するノードの '次の'フィールドをnullに割り当てる必要はありませんか?私はちょっと混乱しています。なぜなら、 '次の'フィールドがまだ要素を指しているように見えるので、2つのノードがそれを指しているからです。

ご協力いただければ幸いです。

+0

しかし、この要素はリストからアクセスできなくなります。つまり、リストメソッドを使用すると何も影響しません。 –

答えて

2

削除するノードの「次へ」フィールドをnullに割り当てる必要はありませんか?

Javaでこれを行う理由はありません。

あなたはそれが参照カウントを使用してスマートポインタをクリアするためにこれをしなければならないC++作品のような方法を別の言語、のことを考えなければなりません

ので、私は少し混乱しています。 Javaでは

、参照(オブジェクトまたはインデックス)ちょうど4バイトのポインタである

あなたが指している2つのノードを持っているので、「次へ」のフィールドは、まだ、後の要素を指すように見えますそれに。

実際には存在しないように、それを参照していないオブジェクトです。ガベージコレクターがそれを浄化するまで、それはメモリの少しの無駄です。それは「次へ」フィールドのように見えます

+1

ありがとうございます – dalold

0

はまだ何もそれが最終的には自動的にガベージコレクタによって削除されます削除したノードを指していないのでそれは、重要ではありません

後の要素を指します。

関連する問題