我遇到了这个真正的麻烦;我不知道如何使这个代码点向后回到前一个节点。我只能使用get / set Next和Previous。这就是我到目前为止所做的:
public Doubly copyChildren(){
Doubly newElement= this.getFirstChild().copyNode();
Doubly current= this.getFirstChild();
while (current.getNext!=null){
newElement.setNext(current.copyNode());
current=current.getNext();
}
return newElement;
}
有人可以帮忙吗?
答案 0 :(得分:0)
您需要在列表中进行迭代,并将每个元素复制/克隆到新列表中。
您面临的问题是LinkedList仅保留对其包含的元素的内部引用。当您将列表a复制到列表b时,您实际在做的是将列表a中的引用复制到列表b,因此原始列表上的任何更改都会反映到新复制的列表中。
答案 1 :(得分:0)
我假设你想要一份双重链表的深层副本。
Doubly iterator = this.getFirstChild();
Doubly newList = iterator.copyNode();
Doubly newListTail = newList;
Doubly deepCurrNode = null
while ((iterator = iterator.getNext()) != null)
{
deepCurrNode = iterator.copyNode();
newListTail.setNext(deepCurrNode);
deepCurrNode.setPrevious(newListTail);
newListTail = deepCurrNode;
}
//just in case these aren't already null, I'll be explicit
newList.setPrevious(null);
newListTail.setNext(null);
return newList;
编辑:
解释
psuedo代码如下:
while (more items, set iterator equal to next node)
{
deepCurrNode <-- get deep copy of iterator (this is the item i want to add to my newList)
Set the tail's next to deepCurrNode to link them
Set deepCurrNode's previous to the tail to link backwards
Set the Tail to point to the new tail of the list (deepCurrNode)
}