我一直在执行中链表简单实用函数调用MoveNode()使用的Java更新。节点没有得到
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}
Wha t是背后的原因异常?为什么列表的头节点没有正确更新?我错过了什么?
P.S. - 头节点是一个全局变量,可以从任何函数访问。
好吧!得到它了。但是,请您详细说明对localVariable.someMember所做的任何更改如何更改实际值? – Daggerhunt 2014-10-30 07:02:55
@Daggerhunt:它不会改变'localVariable'的值 - 它改变存储在'localVariable'的值所引用的对象中的信息。这就是要点 - 将变量看作纸片。假设一个局部变量和其他地方的变量都有我的家庭住址 - 就像我的房子一样。如果您使用局部变量导航到我的房子,然后将门涂成红色,那么使用另一张纸导航到我家的人也会看到红色的门。但如果你只是改变你的纸上的内容,他们就不会看到*那*。 – 2014-10-30 07:08:25
优秀的解释。我现在明白你在说什么。 – Daggerhunt 2014-10-30 07:19:37