0

私は過去1年間の質問を試してみましたが、以下の質問で行き詰まっています。質問1

以下では、次のメソッドを使用して、ListIteratorインターフェイスとLinkedListクラスの存在を想定できます。

public interface ListIterator<E>
{
  E next();
  boolean hasNext();

}

public class LinkedList<E>
{

  public void addLast(E obj){..}
  public int size(){..}
  public ListIterator<E> listIterator(){...}

}

ListIteratorインターフェースとLinkedListクラスで上記のメソッドを使用して、以下に示すprintBackwardメソッドの設計を完了しました。メソッドに新しい変数を導入しないでください。あなたの答えでは、メソッド全体をコピーしないでください。初期化1、初期化2、ブロック1、ブロック2、ブロック3の内容を書き込みます。printBackwardメソッドは、単一のリストで再帰的に逆方向に記述する必要があります。パラメータnは、リストのサイズを指定します。

public class MyLinkedList<E> extends LinkedList<E>
{

           public void printBackward(int n)
           {

             if(n > 0){

              ListIterator<E> itr = /**Initialisation 1**/   list1.listIterator();

              int count = /**Initialisation 2**/  0;

              E item;

              while(itr.hasNext())
              {
                /**Block 1**/  addLast(list1); printBackward(); count --;

              }

                /**Block 2**/ E.next;
             }else

             /**Block 3**/ return;
           }
         }
 }

/ ** .. ** /の横に回答を挿入しましたが、正しいかどうかわかりません。誰かが私の間違いを訂正するのを手伝ってくれるとありがたいです

4

3 に答える 3

0

リストの長さを取得し、forループを作成してそれらを逆方向に通過させます。

for(int i = *sizeOfList*; i > 0; i--)
{

System.out.println(currentItem[i]);

}
于 2012-08-24T13:32:09.657 に答える
0

printBackwardメソッドの設計は非常に奇妙です。すべての再帰で最後の位置に到達するためにイテレータを使用するように求められているようです。ここでは、パフォーマンス/有効性は問題ではないか、見たいと考えています。あなたはどれほど機知に富んでいますか。以下の解決策を見つけてください:

public void printBackward(int n) {

    if (n > 0) {
        ListIterator<E> itr = listIterator(); /** Initialisation 1 **/          
        int count = 0; /** Initialisation 2 **/

        E item;
        while (itr.hasNext()) {
            /** Block 1 **/             
            item = itr.next();
            if (++count == n) {
                System.out.println(item); //prints here
                printBackward(n-1);
            }               
        }
        /** Block 2 **/
        // nothing
    } else {            
        /** Block 3 **/
        // nothing
    }
}

次のように使用java.util.LinkedListしてテストできます。java.util.ListIterator

public static void main(String[] args) {
    MyLinkedList<String> list = new MyLinkedList<String>();
    list.add("1");
    list.add("2");
    list.add("3");
    list.printBackward(list.size());
}
于 2012-08-24T16:23:08.603 に答える
0
public void printBackward(int n) {

if (n > 0) {
    ListIterator<E> itr = listIterator(); /** Initialisation 1 **/          
    int count = 0; /** Initialisation 2 **/

    E item;
    while (itr.hasNext()) {
        /** Block 1 **/             
        item = itr.next();
        if (count == n-1) {
            System.out.println(item); //prints here
           count++;
        }               
    }
    /** Block 2 **/
     printBackward(n-1);
} else {            
    /** Block 3 **/
    // nothing
}

}

于 2013-01-16T16:02:16.920 に答える