码:

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

谁能看到问题所在?

最佳答案

while (this.next != null)


一旦开始在最后一个节点上调用printFollowingNodesInOrder,它将永远循环,因为倒数第二个节点(正在调用函数的那个​​节点)具有一个next永远不会消失的循环。使用递归访问下一个节点时,无需循环执行。退出循环,它将起作用,但是在调用该函数之前,请确保检查null。

10-07 19:36