0

私はこれをテストするためのマシンを持っていないので、ここであなたの助けが必要です。

  • 私が割り当てるL.head = NULLと、Lないのでが空になりheadますか?

  • L.head = L.next.next(3番目のノード)を割り当てると、前の2つのノードはガベージコレクター(Javaを使用していると仮定)として正しくなりますか?

下の写真のメソッドを作成する試みcutToIntegerは次のとおりです。間違っている場合は修正してください。

void cutToInteger (IntSLList L , int n){

    IntSLList tmp =L.head ;
    while( tmp != NULL || !tmp.into.equals(n)){
            tmp=tmp.next;
    }
    L.head = tmp;
}

実装は簡単に思えますが、削除するためのガベージデータになるノードのロジックは常に私を混乱させます。

ここに画像の説明を入力してください

更新:これが上のスクリーンショットの質問です

メソッドvoidcutToNumber(IntSLList L、int n)は、整数の単一リンクリストLを、先頭から整数nに達するまでカットします。nがLにない場合、リストは空になります。

4

4 に答える 4

0

あなたはこれについてあまりにも一生懸命考えています。オブジェクトへの文字列参照がない場合、オブジェクトは収集可能になります。

あなたの例では、オブジェクトへの参照がなくなると収集可能になります。それ以上に複雑ではありません。

于 2012-10-06T13:59:39.570 に答える
0

(以下のテキストでは、「到達可能」は「IntSLListオブジェクトが到達可能である場合に到達可能」の省略形です。)

L.head = NULLを割り当てると、頭がないためLは空になりますか?

リンクリストの定義によって異なります。ダイアグラムにはテールポインターが含まれているため、そのダイアグラムへの更新を除いて、最後の要素は到達可能なままになります(したがって、ガベージコレクションは行われません)。ただし、他のノードは最後のノードから到達できないため、(他にそれらへの参照がないと仮定して)到達不能になり、ガベージコレクションの対象となる可能性があります。

L.head = L.next.next(3番目のノード)を割り当てると、前の2つのノードはガベージコレクター(Javaを使用していると仮定)として正しくなりますか?

はい、同じ理由で、これら2つのノードへの他の参照がないと仮定します。

メソッドvoidcutToNumber(IntSLList L、int n)は、整数の単一リンクリストLを、先頭から整数nに達するまでカットします。nがLにない場合、リストは空になります。

以前と同様に、テールは変更されないままなので、他のすべてのノードが到達不能になる可能性がありますが、少なくとも最後のノードは到達可能のままになります。

コードにバグが含まれていることに注意してください。条件には論理が含まれている必要があり、論理ではなく、最後に到達したときに適切に停止する必要があります(現時点ではtmp == null、ビットからNPEを取得すると、2番目の条件が評価されtmp.intoます) 。そしてもちろん、頭はないが尻尾のあるリストはかなり混乱します(私はそれがバグだとあえて言います)。

于 2012-10-06T14:00:24.230 に答える
0
  1. ループでは、&&演算子ではなく演算子である必要があります||。そうでない場合は、常にリンクの最後でのみ停止します。

  2. nはであるため、他のと比較するには演算子intを使用する必要があります。==\!=int

メソッドは次のようになります。

void cutToInteger (IntSLList L , int n){    
    IntSLList tmp =L.head;
    while( tmp != NULL && tmp.into != n ){
         tmp=tmp.next;
    }
    L.head = tmp;
}
于 2012-10-06T14:02:27.353 に答える
0

java.util.LinkedListを見てください-それは同じことをしているようです。

1)正解です!ヘッドポインタは何も指していません(nullポインタ)ので、リストは「空」と見なされ、size=0を返す必要があります。

2)ガベージコレクターは賢いです。「カット」の後で誰も(5)を指さないので、オブジェクト5はコレクションに使用でき、次に8が使用可能になり、次に4、次に12が使用可能になります。コレクターはそれらすべてを一度に見つけることができます。実際の収集の順序とタイミングは、コレクターの実装次第です(短い/小さなプログラムでは、コレクターはまったく実行されない場合があります)。

于 2012-10-06T14:04:49.547 に答える