0

我正在尝试过去一年的问题以进行重考,并被以下问题所困扰。问题 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 方法的设计。您不应该在方法中引入任何新变量。在您的回答中,不要复制整个方法。写入 Initialisation 1, Initialisation 2, Block 1, Block 2, Block 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
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 回答
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 回答