我正在编写一个名为twin()的方法,该方法将采用链表[1 2 3 4]并返回[1 1 2 2 3 3 4 4]。我有一个工作方法,但我对一部分感到困惑。在我的代码中,我声明了一个名为temp的新SListNode变量。我希望这个temp复制当前节点然后连接它。当我尝试执行SListNode temp = current时,程序将不会运行。但是,如果我手动设置temp的项目和下一个字段,该方法将运行正常。任何人都能解释当你做SListNode temp = current时会发生什么吗?
public void twin() {
SListNode current = head;
if(current == null){
return;
}
for(int i = 0; i <this.length();i++){
if(current == null){
return;
}
SListNode temp = new SListNode(0); // Problem here when I substitute these 3 lines for SListNode temp = current;
temp.next = current.next;
temp.item = current.item;
current.next = temp;
current = current.next.next;
}
}
答案 0 :(得分:0)
如果您执行了temp = current
,则不会复制该对象。您将只是提供另一种访问该对象的方法。换句话说,temp
和current
将引用到同一个对象。
如果你那样做了,
行temp.next = current.next;
temp.item = current.item;
不会做任何事情,因为它就像在做temp.next = temp.next
。
另外,在
行current.next = temp;
您将使current
的下一个节点成为其自身(current.next
将为current
)。