如何克隆(deepcopy)java链接列表
我正在实现我的链接列表的克隆,它是在库中没有链接列表的情况下编写的。 我的代码如下所示:如何克隆(deepcopy)java链接列表,java,linked-list,clone,Java,Linked List,Clone,我正在实现我的链接列表的克隆,它是在库中没有链接列表的情况下编写的。 我的代码如下所示: public class myNode implements Cloneable { private class1 obj1; private myNode next; //---- some immutables.... public object clone(){ try { myNode cloneNode = super.c
public class myNode implements Cloneable {
private class1 obj1;
private myNode next;
//---- some immutables....
public object clone(){
try {
myNode cloneNode = super.clone();
}
catch (ClassNotSupported ex){
}
cloneNode.obj1 = this.obj1.clone();//This is implemented.
cloneNode.next = this.next.clone();
return cloneNode;
}
}
现在,我的克隆方法的结果是堆栈溢出。
例如,如果我的myNode链接列表如下所示:
aa->bb->cc->dd->null
然后,在我的测试函数中,在链接列表的头部调用clone(此处未显示),然后链接列表的克隆螺旋形地进入一个无限循环,如下所示:
aa->bb->aa->bb->aa->
我搞砸了什么。请有人帮忙。您的克隆方法有问题,您只需将代码编辑为:
public object clone(){
try {
myNode cloneNode = (myNode)super.clone();
cloneNode.obj1= class1.clone();
}
catch (ClassNotSupported ex){
}
return cloneNode;
}
在cloneNode.next=this.next.clone;之前是否应该检查next是否为null;?我正在检查。这里不是为了简单而写的。因为您在连续节点上递归调用clone,如果有很多节点,您将得到stackoverflow异常。您可以发布代码以将新节点添加到列表中吗?this.next.clone;还有这个.obj1.clone;因为这些线。这些使您的方法成为递归方法。