1

現在、リンクされたリストを理解するのに苦労しています。ノードを使用するコードがいくつかあり、整数パラメーターで指定されたインデックス位置に、文字列パラメーターが格納された新しいノードを作成する反復アプローチを使用するように求められました。インデックス位置の古いノードは、新しく挿入されたノードの後に​​続く必要があります。

これらはフィールドです:

  // a string that contains the full name on the filesystem of an image file.
private String imageName;

// a reference to the next ImageNode in the linked list.
private ImageNode next;

//temporary node created to start the set of nodes
private ImageNode temp = this;

そして、これは私がこれまでに書いたコードです: getNext() が次のノードを返すことに注意してください。

private void addIter(String imageFileStr, int pos) {

    int count = 0;
    while(temp.getNext() != null){
        temp = temp.getNext();
        count++;

        if(count == pos){
          temp.getNext() = ???
        }

    }
}

これは、2 つのノードを追加する正しい方法ですか? その場合、これは現在、ノードを現在のノードのセットの最後に追加する必要がある場合にのみ機能します。上記のように、セットの途中にノードを追加し、古いノードがそれに続くようにコードを変更するにはどうすればよいですか (「インデックス位置の古いノードは、新しく挿入されたノードに従う必要があります。」)?

最後に、temp.getNext() = x を設定できるように、addIter からの入力に等しい変数 (x) を作成するにはどうすればよいですか? (現在、コード内の疑問符で示されています)。

4

3 に答える 3

0

ノード A、B、C があり、新しいノード (D) を位置 3 に挿入したいとします。リストをノード 2、つまり B まで繰り返す必要があります。次に、B に続くノードへのリンクを保存します。 TempC: などの一時変数に入れますNode TempC = B.getNext()。その後、挿入するノードの次のノードとして TempC を設定しますD.setNext(TempC)。次に、 :Dの後の次のノードとして設定します。結果のセットは次のようになります。BB.setNext(D)A, B, D, C

PS ここで、最初のノードは 0 ではなく 1 であると仮定します。

于 2012-09-24T13:10:50.273 に答える
0

実装をもっと見ることなくこれに完全に答えることは不可能ですが、いくつかのことを次に示します。

  1. temp.getNext() = ???意味がありません。関数呼び出しに割り当てることはできません。setNext(ImageNode node)次のノードを指定された値に設定するメソッドを追加する必要があります。

  2. あなたのaddメソッドでは、入力文字列を使用して新しいノードを作成する必要があります(それを呼び出してnewNode、現在のノードを見つけますpos(それを呼び出しますexistingNode))。次に、いくつかのことを行う必要があります。

    • newNode.next現在後のノードに設定しますexistingNode(またはnullリストの最後にある場合)。
    • に設定existingNode.nextnewNodeます。

これはおそらく次のようになります。

public void add(String item, int pos) {
    if (pos > length) {
         // Probably just throw an out of bounds exception
    }

    Node existingNode = head;
    for (int i = 0; i < pos; i++)
         existingNode = existingNode.getNext();

    Node newNode = new Node(item);
    newNode.setNext(existingNode.getNext());
    existingNode.setNext(newNode);
}
于 2012-09-24T13:12:59.110 に答える
-1

間違いなく、新しいオブジェクトを作成してデータを保存する必要があります。新しいオブジェクトは、それを追加する次のノードを指す必要があり、次にtempはオブジェクトを指す必要があります。

于 2012-09-24T13:08:41.390 に答える