java - 链表的头节点未更新

标签 java data-structures linked-list singly-linked-list

我一直在使用Java在链接列表中实现一个名为MoveNode()的简单实用程序函数。

MoveNode()的主要目的是删除一个链表(源列表)的第一个节点并将其添加到另一个链表(目标列表)的开头。

示例如下:

Destination_Linked_List = {1,2,3} 
Source_List_List = {4,5,6}

调用MoveNode(Destination_Linked_List,Source_List_List)后,我们得到:

Destination_Linked_List = {4,1,2,3}
Source_List_List = {5,6}

以下是我对上述内容的 Java 实现:

static void MoveNode(LinkedList LL1,LinkedList LL2)
{
    Node sourceref = LL2.head;
    Node destref = LL1.head;
    Node temp = sourceref.next;
    sourceref.next = destref;
    LL1.head = sourceref;
    LL2.head = temp;
}

完美运行!

但是,如果我更改代码的最后两行并将其替换为本地 Node 变量,则输出会完全改变。

这里是:

如果我改变:

   LL1.head = sourceref;
   LL2.head = temp;

至:

   destref = sourceref;
   sourceref = temp; 

通过执行此更改得到的输出是:

 Destination_Linked_List = {1,2,3} 
 Source_List_List = {4,1,2,3}

异常背后的原因是什么?为什么列表的头节点没有正确更新?我错过了什么?

附注- head 节点是一个全局变量,可以从任何函数访问。

最佳答案

Why does the head nodes of the lists does not get updated properly?

因为您只是更改局部变量的值。这就是您正在做的所有事情 - 您根本没有对列表对象进行任何更改。对局部变量的更改在方法本身之外没有任何影响。

请注意,当我说“更改局部变量”时,我的意思是:

localVariable = someOtherValue;

如果您有:

localVariable.someMember = someOtherValue;

那么可能会在方法之外产生影响,因为这会更改对象的成员。如果该对象可以在方法外部访问,那么更改也将在那里可见。

关于java - 链表的头节点未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646719/

相关文章:

Java保护变量可以在同一个包内访问而不需要继承如何?

java - 在客户端/服务器 Java 应用程序中保存用户名/密码的数据结构

c - 将链表中的值添加到变量

pointers - 通过指针访问类型后派生类型中 Fortran 字符串的奇怪行为

java - 如何与 Hibernate 实现 3 多对多关系?

java - 在 IBM Rational Software Architect for Java6 Maven 安装中收到致命警报 : protocol_version to https://repo. maven.apache.org/maven2/

java - 在哪里可以找到所有选择器 xml 属性(包括子属性)?

用于 x/y 坐标稀疏列表的 Python 数据结构

algorithm - 如何高效地统计[start,end]之间质因数只有3或5的数字?

c - 反向链表(段错误)