Recurcison Java奇怪的行为,打印节点

时间:2012-12-10 20:02:58

标签: java recursion linked-list

代码:

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 个答案:

答案 0 :(得分:5)

更改

while(this.next != null){

if(this.next != null){

如果要迭代打印列表,则需要循环。在递归解决方案中,你没有。

答案 1 :(得分:3)

while (this.next != null)
一旦它开始在最后一个节点上调用printFollowingNodesInOrder

就会永远循环,因为倒数第二个节点(调用该函数的节点)有一个永远不会消失的next。当您使用递归访问下一个节点时,您不需要在循环中执行此操作。取出循环它会起作用,但一定要在调用函数之前检查null。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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