链表中的节点如何 pointed/referenced

How Nodes are pointed/referenced in linkedlist

我对链表中的节点如何相互引用感到非常困惑。 假设我们有这样的代码:

</code> <code>NodeA: 1->2->3; NodeB: 6->7->8; ListNode NodeC = NodeA; IF WE DO: NodeC.next = NodeB;// NodeC becomes 1->6->7->8, NodeA also changed to 1->6->7->8, why? OR WE DO: NodeC = NodeB;//this will only change NodeC, but NodeA stay the origin, why?

当我们将两个节点设置为相同时,如果我们将一个节点更改为下一个指向不同的节点,则另一个节点也会更改。 但是,如果只说NodeC = NodeB,好像NodeA上没有任何变化。我一直在为此苦苦挣扎 几天了,谁能解释一下这是如何工作的?非常感谢!

当你说NodeA: 1->2->3;时,有3个节点被引用,1个变量:

// These are the nodes. They don't have names, I'm just calling them NodeX, where X is a number.
Node1
  value = 1
  next = Node2
Node2
  value = 2
  next = Node3
Node3
  value = 3
  next = null
// This is the variable
NodeA = Node1

然后,NodeB: 6->7->8;引用另一组节点,Node6, Node7, Node8,和一个变量NodeB = Node6

当您执行 NodeC = NodeA 时,现在有两个变量,每个变量都引用 Node1。所以NodeC = NodeA = 1->2->3。希望到目前为止这是有意义的。

当您执行 NodeC.next = NodeB 时,我们是说,对于变量 NodeC(即 Node1)引用的节点,将其 next 成员更新为任何内容由变量 NodeB(即 Node6)引用。

所以

NodeC = NodeA = Node1 // Variables
NodeB = Node6
Node1
  value = 1
  next = Node6

所以NodeC = 1->6->7->8。由于 NodeA 也指代 NodeC 所指的同一节点,因此 NodeA also = 1->6->7->8.

当您执行 NodeC = NodeB 时,NodeC 现在引用 Node6,并且 NodeA 继续引用 Node1,因此更改为 NodeC不影响 NodeA.