0

まず、解決策ではなく説明が必要です。コードからわかるように、MovieNode を MovieList に挿入しようとしています。メソッドは MovieList クラスにあります。「リスト」は、MovieNode を保持する場所です。

public void insert(Movie movie, int index)
{
    MovieNode node = new MovieNode(movie);
    MovieNode element;
    MovieNode current = list;

    while(current.previous != null)
        current = current.previous;
    element = current; // first node in the list

    for(int n = 1; n < index; n++)
        element = element.next; // determines where to put new node

    node.next = element;
    element.previous.next = node;

}

上記の方法は機能しているようです。ただし、この行を変更すると

element.previous.next = node;

これで。

element = node;

挿入後、リンクリストに変更はありません。要素をノードに置き換えると、リスト内の要素の前にあるノードの後継者も変更されるため、 element.previous.next は要素自体とまったく同じように思えます。そして、その後継者をノードである新しい要素に向けます。私は主題に慣れていないので、私が犯したかもしれない間違いをお詫びします。

4

2 に答える 2

1

違いがあります:

element.previous.next = node;

前の要素の次のフィールドがノードを指すようにします。つまり、の要素を変更します。

element = node;

(新しい)ノードにローカル変数要素を割り当てるだけなので、ノーオペレーションに近いです。

于 2013-05-05T19:55:55.227 に答える
0

elementreferenceから へMovieNodeelement.previous.nextは同じ への別の参照MovieNodeです。これら 2 つの違いは、それelementが関数のスコープ内の一時的な参照であることです。ただし、これは、このスコープ外で定義さelement.previous.nextれたノードによって保持される参照です。element.previous

a = bJava では、abがオブジェクトであるということは、と が同じオブジェクトaを参照することを意味することを覚えておくことが重要です。bを変更するとabも変更されます。

MovieNodeこれが、関数の先頭にをコピーした理由です。ノードを参照する代わりに効果的にコピーするためです。previous残りの影響は、参照と参照を操作するだけでnext、実際のオブジェクトは処理しません。

于 2013-05-05T20:17:13.467 に答える