0

代码:

public class NodeType {

    public int value;
    public NodeType next;

    public NodeType(){
        value = 0;
        next = null;
    }

    public void printFollowingNodesInOrder(){
        System.out.println(this.value);
        while(this.next != null){
            this.next.printFollowingNodesInOrder();
        }
    }
}

测试类:

public class TestClass {

    public static void main(String[] args){

        NodeType nodeOne = new NodeType();
        NodeType nodeTwo = new NodeType();
        NodeType nodeThree = new NodeType();

        nodeOne.value = 1;
        nodeTwo.value = 2;
        nodeThree.value = 3;

        nodeOne.next = nodeTwo;
        nodeTwo.next = nodeThree;

        nodeOne.printFollowingNodesInOrder();       
    }   
}

当我运行这个main方法时,方法似乎在3之后没有退出。输出为:1 2 3 3 3 3 3 3 3

谁能看出问题出在哪里?

4

4 回答 4

5

改变

while(this.next != null){

if(this.next != null){

如果您要迭代地打印列表,您将需要一个循环。在递归解决方案中,您不需要。

于 2012-12-10T20:05:51.870 回答
3
while (this.next != null)

一旦它开始printFollowingNodesInOrder在最后一个节点上调用,它就会永远循环,因为倒数第二个节点(调用函数的那个​​节点)有一个next永远不会消失的节点。当您使用递归访问下一个节点时,您不需要循环执行此操作。取出循环,它会工作,但一定要在调用函数之前检查是否为空。

于 2012-12-10T20:05:23.680 回答
2

您没有基本情况,也没有递归方法的默认退出条件。

于 2012-12-10T20:05:02.323 回答
1

你的打印功能应该是这样的:

public void printFollowingNodesInOrder(){
    System.out.println(value);
    if(next != null){
        next.printFollowingNodesInOrder();
    }
}
于 2012-12-10T20:08:05.120 回答