print单链表反向打印方法

ecfsfe2w  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(342)

我正在尝试过去一年的问题,并与下面的问题卡住了。问题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;
           }
         }
 }

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

nwlls2ji

nwlls2ji1#

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());
}
svgewumm

svgewumm2#

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
}

}

iqxoj9l9

iqxoj9l93#

获取列表的长度并创建一个for循环来向后遍历它们。

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

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

}

相关问题