Как узлы указываются / упоминаются в связанном списке - PullRequest
0 голосов
/ 03 февраля 2020

Я очень озадачен тем, как узлы ссылаются друг на друга в списке ссылок. Предположим, что у нас есть код, подобный следующему:

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?

Когда мы устанавливаем два узла ponitning на одно и то же, и если мы изменим один узел, чтобы указать другой следующий, другой тоже переодеться. Однако , если мы говорим только Node C = NodeB, кажется, что на NodeA ничего не изменилось. Я боролся с этим в течение нескольких дней, кто-нибудь может объяснить, как это работает? очень ценю!

1 Ответ

0 голосов
/ 03 февраля 2020

Когда вы говорите 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).

So

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

So NodeC = 1->6->7->8. И поскольку NodeA также ссылается на тот же узел, что и NodeC, NodeA also = 1->6->7->8.

Когда вы делаете NodeC = NodeB, NodeC теперь ссылается на Node6, а NodeA продолжает ссылаться Node1, поэтому изменения на NodeC не влияют на NodeA.

...