如何克隆(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;因为这些线。这些使您的方法成为递归方法。