java - 单链表复制困惑

标签 java linked-list nodes

假设我们有一个链表 1->2->3->4->51head

ListNode newHead = new ListNode(0);
ListNode p = newHead;  
ListNode runner = newHead; 
newHead.next = head; // Line 1 p and runner next is also head
while(n>0){
    runner = runner.next; // Line 2 why newHead and p does not move along with runner just as above because they are equal object (I assume)
    n--;
}

为什么不p , newHeadrunner全部同时改变?在 Line 1他们确实这样做,但在 Line 2他们不这样做,为什么?

最佳答案

假设newHead位于内存位置A
由于您将 newHead 分配给 pp 现在也指向内存位置 A
runner 的逻辑相同,指向 A

现在您设置了 newHead 的一些属性,这会“更改”所有三个 newHeadprunner 上的属性 因为它们都指向同一内存位置 A 中的同一对象。

如果您现在编写 runner = runner.next,则可以为 runner 分配一个新值。
现在,runner 指向内存位置B

但这对于 pnewHead 来说根本不重要,因为它们只指向与 runner 相同的位置,但没有其他关系那。他们只指向相同的位置/相同的对象。如果您更改了对象,那么三个人都会知道该更改。但是,如果您更改三个指向之一的位置,则其他两个指向的位置并不重要。

Java 非原始变量只是指向实际对象所在内存地址的指针/引用。作为开发人员,您不必处理指针可能引起的问题(或访问它们提供的功能)。

关于java - 单链表复制困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473156/

相关文章:

amazon-ec2 - 无法将节点添加到现有的 Cassandra 集群

java - 线程中的异常 "main"java.lang.IllegalArgumentException : PWC6309: Illegal compilerSourceVM: 12

java - 我怎样才能执行其他类(class)?

java - 构建和部署成功,但没有 Web 进程在 Spark 上的 Heroku 上运行(Java 框架)

java - CookieManager.getCookie() 返回不同的值

java - 设计链表 - Leetcode #707 - 得到错误的输出

c++ - 为什么我的链接列表在函数调用后被删除?

C 存储不同数据类型的链表?

c# - 我需要在父级而不是子级中 InsertBefore 或 InsertAfter

javascript - 按钮元素可以有子节点吗?