我有一个问题。我得到一个链接列表节点,其参数为A val,Node为next。我还给了一个函数调用join,它将列表x的结尾加到y。
5 | - > 6 | - > 7 | - >空
Node x = new Node(5, new Node(6, new Node(7, null)));
this.join(x, x)
public void join(Node x, Node y){
if(x.next==null){
x.next = y;
}else{
join(x.next, y);
}
}
当我得到的长度只有3.我可以怎么来不是堆栈溢出呢?
答案 0 :(得分:1)
怎么没有堆栈溢出 代替?
因为在join()
的调用终止之前,列表仍然有结束。如果你再次呼叫 ,那么......
答案 1 :(得分:1)
联接功能看起来不错,但如果您使用this.join(x,x)
调用它,则会构建某种圆!
因此,如果您在x
之后使用this.join(x,x)
进行递归操作,则可能会因为无休止的重复而获得某种堆栈溢出。
答案 2 :(得分:1)
因为节点x只有一个实例,所以您在列表中构建了一个圆圈。你永远不会达到x.next == null。你可能应该检查一些平等。