java - 复制链表节点并将其插入到链表中间

标签 java list methods linked-list

我正在编写一个名为 twin() 的方法,它将采用链表 [1 2 3 4] 并返回 [1 1 2 2 3 3 4 4]。我有一个工作方法,但我对一部分感到困惑。在我的代码中,我声明了一个名为 temp 的新 SListNode 变量。我希望这个临时节点复制当前节点然后连接它。当我尝试执行 SListNode temp = current 时,程序将无法运行。但是,如果我手动设置 temp 的 item 和 next 字段,该方法将运行得很好。谁能解释一下当你执行 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;
    }
}

最佳答案

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

如果你这样做了,这些行

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

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

另外,在行中

current.next = temp;

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

关于java - 复制链表节点并将其插入到链表中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104998/

相关文章:

java - 如何在 Java Swing 中正确设计 MV 应用程序?

java - 设置迭代器的 Java 泛型

java - 方法不全局更新变量?

Python 列表括号删除

java - 为什么 Stream 没有 toList() 方法?

java - Java中使用数组计算数据表中行的平均值

java - 在 while 循环中要求用户再次玩的位置(猜谜游戏)

java - 如何将多个映射聚合为一个计算相同值出现次数的映射

java - 计算LCOM3?

ruby-on-rails - Ruby on Rails可重排的有序列表