代码:
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
任何人都可以看到问题所在吗?
答案 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();
}
}