使用递归打印单个链表的后向方法

时间:2012-08-24 13:19:23

标签: java algorithm recursion iterator linked-list

我正在尝试过去一年的问题以获得重新调整,并坚持下面的问题。 问题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;
           }
         }
 }

我在/ ** .. ** /旁边插入了我的答案,但我不确定它们是否正确。如果有人能帮我纠正错误,我将不胜感激

3 个答案:

答案 0 :(得分:0)

获取列表的长度并创建一个for循环以向后浏览它们,例如

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

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

}

答案 1 :(得分: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.LinkedListjava.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());
}

答案 2 :(得分: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
}

}