print单链表反向打印方法

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

我正在尝试过去一年的问题,并与下面的问题卡住了。问题1
在下面的示例中,您可以使用以下方法假设listiterator接口和linkedlist类的存在

  1. public interface ListIterator<E>
  2. {
  3. E next();
  4. boolean hasNext();
  5. }
  6. public class LinkedList<E>
  7. {
  8. public void addLast(E obj){..}
  9. public int size(){..}
  10. public ListIterator<E> listIterator(){...}
  11. }

使用上面列出的listiterator接口和linkedlist类中的方法,完成了下面给出的printbackward方法的设计。您不应该在方法中引入任何新变量。在你的回答中,不要照搬整个方法。写入初始化1、初始化2、块1、块2、块3的内容。printbackward方法应该在一个单独的向后列表中递归编写。参数n指定列表的大小。

  1. public class MyLinkedList<E> extends LinkedList<E>
  2. {
  3. public void printBackward(int n)
  4. {
  5. if(n > 0){
  6. ListIterator<E> itr = /**Initialisation 1**/ list1.listIterator();
  7. int count = /**Initialisation 2**/ 0;
  8. E item;
  9. while(itr.hasNext())
  10. {
  11. /**Block 1**/ addLast(list1); printBackward(); count --;
  12. }
  13. /**Block 2**/ E.next;
  14. }else
  15. /**Block 3**/ return;
  16. }
  17. }
  18. }

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

nwlls2ji

nwlls2ji1#

printbackward方法的设计非常奇怪,似乎他们希望你使用迭代器,不管你在每个递归中得到最后一个位置的是什么,必须是性能/有效性在这里不是一个问题,或者他们想看看你有多聪明。找到以下解决方案:

  1. public void printBackward(int n) {
  2. if (n > 0) {
  3. ListIterator<E> itr = listIterator(); /**Initialisation 1**/
  4. int count = 0; /**Initialisation 2**/
  5. E item;
  6. while (itr.hasNext()) {
  7. /**Block 1**/
  8. item = itr.next();
  9. if (++count == n) {
  10. System.out.println(item); //prints here
  11. printBackward(n-1);
  12. }
  13. }
  14. /**Block 2**/
  15. // nothing
  16. } else {
  17. /**Block 3**/
  18. // nothing
  19. }
  20. }

你可以用 java.util.LinkedList 以及 java.util.ListIterator 这样地:

  1. public static void main(String[] args) {
  2. MyLinkedList<String> list = new MyLinkedList<String>();
  3. list.add("1");
  4. list.add("2");
  5. list.add("3");
  6. list.printBackward(list.size());
  7. }
展开查看全部
svgewumm

svgewumm2#

  1. public void printBackward(int n) {
  2. if (n > 0) {
  3. ListIterator<E> itr = listIterator(); /**Initialisation 1**/
  4. int count = 0; /**Initialisation 2**/
  5. E item;
  6. while (itr.hasNext()) {
  7. /**Block 1**/
  8. item = itr.next();
  9. if (count == n-1) {
  10. System.out.println(item); //prints here
  11. count++;
  12. }
  13. }
  14. /**Block 2**/
  15. printBackward(n-1);
  16. } else {
  17. /**Block 3**/
  18. // nothing
  19. }

}

展开查看全部
iqxoj9l9

iqxoj9l93#

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

  1. for(int i = *sizeOfList*; i > 0; i--)
  2. {
  3. System.out.println(currentItem[i]);
  4. }

相关问题