Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中深度复制双链表_Java_List_Linked List_Double_Deep Copy - Fatal编程技术网

如何在Java中深度复制双链表

如何在Java中深度复制双链表,java,list,linked-list,double,deep-copy,Java,List,Linked List,Double,Deep Copy,在我的java程序中,我一直在尝试制作一个双链表的深度副本时遇到了不少麻烦 到目前为止,我的方法是: 公共类DblLinkQueue实现队列{ public Object clone() { DblLinkQueue copy = null; Node currNode, tmp = null; try { copy = (DblLinkQueue)super.clone(); } catch (CloneNotSupportedExceptio

在我的java程序中,我一直在尝试制作一个双链表的深度副本时遇到了不少麻烦

到目前为止,我的方法是:

公共类DblLinkQueue实现队列{

public Object clone() {
    DblLinkQueue copy = null;
    Node currNode, tmp = null;

    try {
        copy = (DblLinkQueue)super.clone();
    } catch (CloneNotSupportedException err) {}   

    for (currNode = mHead.next; currNode.next != mHead; currNode = currNode.next) {

    }
    System.out.println("i: " + i);
    return copy;
}
}

mHead是我列表中的第一个节点,这个链表也是循环的

我的for循环有点问题,因为它遍历列表中的所有元素,然后无限地停留在最后一个元素上


任何帮助都将不胜感激

循环结束条件是当前节点之前的节点不是头部。我不知道你为什么会在那里,我猜这就是你被卡住的原因。在不知道节点类的设计的情况下,我猜当没有后续节点时,
next
成员不会抛出任何类型的迭代异常,因此循环将永远运行(一个
null
节点将永远不会具有与
mHead
相同的引用值)

如果我打算复制一个双链接列表,我只需遍历该列表,复制每个项目,并将其附加到一个新列表中。计算insert/append和iterate函数,那么copy函数就很简单了。

运行当前列表并将每个节点复制到一个新列表中。在下面的列表中,将“当前队列”替换为用于存储当前队列的任何内容

public Object clone()
{
  Node cloneNode;
  DblLinkQueue returnValue = new DblLinkQueue();

  for (Node currentNode : theCurrentQueue)
  {
    cloneNode = currentNode.clone(); // probabaly need to wrap this in a try catch block.
    returnValue.add(cloneNode);
  }

  return returnValue;
}

哎呀,我其实是想复制“currNode.next!=mHead”作为我的条件。链表是以循环的方式设置的,所以我认为一旦我循环了所有的路径并返回到起始节点,它应该停止。啊——我不会从类名猜到这一点。您可能想考虑重命名类,以指示它是循环链表,然后。