gpt4 book ai didi

java - 链表的头节点未更新

转载 作者:行者123 更新时间:2023-12-01 22:37:40 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com