我一直在使用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/