首页 > 解决方案 > 在 Java 中逆转链表混淆

问题描述

在 Java 中反转链表时,我很难理解特定的代码行。这是方法:

public static ListNode reverseList(ListNode head)
{
    ListNode prev = null;

    while(head != null)
    {
        ListNode nextNode = head.next;
        head.next = prev;

        prev = head;
        head = nextNode;
    }

    return prev;
}

我遇到的问题是线路head.next = prev;。发生这种情况时,我假设 nextNode 的值也会发生变化,因为它也指向 head.next。但是,它保持不变。我知道这与对象引用有关,但我不确定。

这让我很困惑,因为如果我通过将一个对象指向另一个对象来创建 2 个 ListNode 对象,如下所示:

    ListNode test = new ListNode(5);

    ListNode test2 = test;

并修改'test'对象的val并从'test2'打印出来,我得到相同的确切值,如下所示:

    test.val = 8;

    System.out.println(test2.val); // this also prints out 8

标签: javaobjectlinked-list

解决方案


一些图片以获得更好的插图

这里head、node1和nextNode是一个对象

在此处输入图像描述

如图所示,headNext 和 nextNode 指向 node1。headNext不是一个对象,而只是引用 node1。

NextheadNext指向 prev。注意 nextNode 仍然指向 node1

在此处输入图像描述

对于第二个示例,在创建值为 5 的 listNode 后test,将 test2 分配并指向测试对象。因此,对测试值的任何更改也将反映到 test2

在此处输入图像描述

希望对理解有帮助!


推荐阅读