【问题标题】:Head nodes of Linked lists not getting updated链表的头节点未更新
【发布时间】:2014-10-30 06:49:29
【问题描述】:

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

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 节点是一个全局变量,可以从任何函数访问。

【问题讨论】:

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


    【解决方案1】:

    为什么列表的头节点没有正确更新?

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

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

    localVariable = someOtherValue;
    

    如果你有:

    localVariable.someMember = someOtherValue;
    

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

    【讨论】:

    • 好的!知道了。但是您能否详细说明对 localVariable.someMember 所做的任何更改如何更改实际值?
    • @Daggerhunt:它不会改变localVariable 的值——它会改变localVariable 所引用的对象中存储的信息。这就是重点——把变量想象成一张纸。假设本地变量和其他地方的变量都打开了我的家庭住址——比如对我家的引用。如果您使用局部变量导航到我家,然后将门涂成红色,那么使用另一张纸导航到我家的人也会看到一扇红色的门。但是,如果您只是更改纸上的内容,他们将看不到 那个
    • 很好的解释。我现在明白你在说什么了。
    【解决方案2】:

    好吧,如果你不改变源列表的头部,它仍然指向同一个第一个元素,但那个第一个元素已经指向目标列表的开头。

    因此,目标列表看起来没有变化(因为您没有更改其头部),源列表以相同的头部开始,但继续使用目标列表的元素。

    LL1.head -> 1->2->3
    
                ^
                | 
    LL2.head -> 4 5->6
    

    【讨论】:

    • 很好的解释。明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多