复制链接列表节点并将其插入链接列表的中间

时间:2014-06-08 10:01:54

标签: java list methods linked-list

我正在编写一个名为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;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您执行了temp = current,则不会复制该对象。您将只是提供另一种访问该对象的方法。换句话说,tempcurrent引用到同一个对象。

如果你那样做了,

temp.next = current.next; 
temp.item = current.item;

不会做任何事情,因为它就像在做temp.next = temp.next

另外,在

current.next = temp;

您将使current的下一个节点成为其自身(current.next将为current)。