Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归和反向递归通过hasNext()方法循环_Java_List_Collections - Fatal编程技术网

Java 递归和反向递归通过hasNext()方法循环

Java 递归和反向递归通过hasNext()方法循环,java,list,collections,Java,List,Collections,大家好,我是java新手,非常感谢大家在这方面的帮助。 好的,这里是我遇到的问题: 我有一个list类和一个listNode类,list类由一个名称、一个firstNode和一个lastNode表示。firstNode和lastNode来自类型listNode,listNode由一个对象(例如数据或对象o)和一个指向列表中下一个节点的nextNode表示,该节点也来自类型listNode 列表类: public class List { private ListNode firstNode;

大家好,我是java新手,非常感谢大家在这方面的帮助。 好的,这里是我遇到的问题: 我有一个list类和一个listNode类,list类由一个名称、一个firstNode和一个lastNode表示。firstNode和lastNode来自类型listNode,listNode由一个对象(例如数据或对象o)和一个指向列表中下一个节点的nextNode表示,该节点也来自类型listNode

列表类:

public class List {

private ListNode firstNode;
private ListNode lastNode;
private String name;

public List() {
    this("list");
}

public List(String listName) {
    name = listName;
    firstNode = lastNode = null;
}

public void insertAtFront(Object insertItem) {
    if (isEmpty())
        firstNode = lastNode = new ListNode(insertItem);
    else
        firstNode = new ListNode(insertItem, firstNode);
}

public void insertAtBack(Object insertItem) {
    if (isEmpty())
        firstNode = lastNode = new ListNode(insertItem);
    else
        lastNode = lastNode.nextNode = new ListNode(insertItem);
}

public Object removeFromFront() throws EmptyListException {
    if (isEmpty())
        throw new EmptyListException(name);
    Object removedItem = firstNode.data;

    if (firstNode == lastNode)
        firstNode = lastNode = null;
    else
        firstNode = firstNode.nextNode;
    return removedItem;
}

public Object removeFromBack() throws EmptyListException {
    if (isEmpty())
        throw new EmptyListException(name);

    Object removedItem = lastNode.data;
    if (firstNode == lastNode)
        firstNode = lastNode = null;
    else {
        ListNode current = firstNode;

        while (current.nextNode != lastNode)
            current = current.nextNode;

        lastNode = current;
        current.nextNode = null;
    }
    return removedItem;
}

public boolean isEmpty() {
    return firstNode == null;
}

public void print() {
    if (isEmpty()) {
        System.out.printf("Empty %s\n", name);
        return;
    }
    System.out.printf("The %s is : ", name);
    ListNode current = firstNode;

    while (current != null) {
        System.out.printf("%s", current.data);
        current = current.nextNode;
    }
    System.out.println("\n");
}

@Override
public String toString() {
    String stk = "(";
    if(isEmpty())return "Empty List";
    ListNode checkNode = firstNode;
        while (checkNode != null) {
        stk += checkNode.data.toString()+ " , ";
        checkNode = checkNode.nextNode;
    }
    return stk+")";
}
public ListNode removeAt (int k){
    if(k<=0 || k>getLength())
        try{
            throw new IllegalValues();
        }catch(IllegalValues iv){
            iv.printStackTrace();
            return null;
        }
    ListNode newNode = firstNode;
    if (k==1) {
        ListNode removedNode = firstNode;
        firstNode = firstNode.nextNode;
        return removedNode;
    }
    ListNode someNode = firstNode;
    for (int i = 1; i < k - 1; i++) {
        someNode = someNode.nextNode;
    }
    ListNode removedNode = someNode.nextNode;
    someNode.nextNode = someNode.nextNode.nextNode;
    return removedNode;
}
public int getLength(){
    ListNode checkNode = firstNode;
    int count =0;
    while (checkNode != null) {
    count++;
    checkNode = checkNode.nextNode;
}
    return count;
}
public  void show(){
    if (firstNode==null)
      return;
    else
        System.out.print(firstNode + " ,");
      firstNode.show();
    }
public  void showRev(){
    if (lastNode==null)
      return;
    else
        System.out.println(lastNode + ",");
      lastNode.showRev();
    }
    }   
我有一个名为show的递归方法,它从头到尾显示列表中的所有对象。现在我正在尝试做一些类似的事情(方法名为showRev()),它从头到尾显示对象(递归方法)而且我不认为有可能做出一个有以前的方法,所以我有点拘泥于这个方法。 我真的很感激你的任何想法
谢谢大家

如果允许您的
showRev
方法接受参数,那么我们可以将每个
ListNode
存储在
java.util.List
中:

public java.util.List<ListNode> showRev(java.util.List<ListNode> nodes) {
    if (this.nextNode == null) {
        Collections.reverse(nodes);

        System.out.println(nodes.stream().collect(Collectors.joining(" ")));

        return nodes;
    }

    nodes.add(lastNode.show());

    return showRev(nodes);
}
public java.util.List showRev(java.util.List节点){
if(this.nextNode==null){
集合。反向(节点);
System.out.println(nodes.stream().collect(collector.joining(“”));
返回节点;
}
nodes.add(lastNode.show());
返回showRev(节点);
}
注意,这里的递归除了将
ListNode
s添加到
java.util.List
之外没有什么特别的作用

要调用此方法,只需向其传递一个
new ArrayList()


另外,我不想使用
List
作为类的名称,因为
java.util.List
很容易与之混淆。

仅供参考:
show
不是类列表中的show不是递归的,而是调用ListNode中的show方法,它是递归的nope,它只调用从同一个类但在不同实例上创建的方法。如果调用
this.show
,它将是递归的,调用另一个节点
。show
不是。这就是我的意思,listnode中的showrev是递归的
public java.util.List<ListNode> showRev(java.util.List<ListNode> nodes) {
    if (this.nextNode == null) {
        Collections.reverse(nodes);

        System.out.println(nodes.stream().collect(Collectors.joining(" ")));

        return nodes;
    }

    nodes.add(lastNode.show());

    return showRev(nodes);
}