Разница между node.next = node и node=node.next

#c# #linked-list

#c# #связанный список

Вопрос:

Теперь я немного путаюсь между этими 2 кодами:

 node = node.next;
node.next = node;

public class ListNode
    {
      public int val;
      public ListNode next;
      public ListNode(int x) { val = x; }
    }
  

Похоже, что оба они каким-то образом работают нормально, но функционируют по-разному. Я не путаю между ними, может ли кто-нибудь объяснить разницу для меня?

Спасибо

Комментарии:

1. Какая часть вас смущает? Как вы думаете, в чем разница? Попробуйте что-то вроде var node = new ListNode (1); node.next = new ListNode(2); . Затем попробуйте две строки, которые вас смущают, и посмотрите, в чем разница. Если вы все еще в замешательстве, пожалуйста, задайте более конкретный вопрос.

2. Произносится = как «становится». Это a=b против b=a .

3. @RufusL Насколько я понимаю, node = node.next означает, что я меняю указатель на следующий узел, node.next = node означает, что я связываю свой узел с узлом.

4. @HenkHolterman Спасибо, это работает.

Ответ №1:

Вы не предоставили большого контекста, но допустим, у нас есть следующий LinkedList: a->b->c-> d-> e (символы представляют ListNodes, а стрелка — next свойство).

И тогда у нас есть ListNode node переменная, указывающая на узел c внутри списка.

(1) Первое присвоение node = node.next ничего не меняет в исходном списке, но изменяет значение node . После назначения LinkedList остается в: a->b->c-> d-> e и node указывает на d

(2) Другое назначение node.next = node изменяет список. Остальная часть списка (d, e) отбрасывается, и c начинает указывать на себя навсегда: a->b->c->c->c->c-> c .. node остается указывающим на c

Комментарии:

1. Вы должны упомянуть, что в (1) после выполнения node = node.next это, если node первоначально указывает на c это node , теперь будет указывать на d .

2. Аналогично, для (2) упомяните, что node все еще указывает на c . Вы установили, что это, безусловно, образует замкнутый цикл в списке, где c-> c , но не упомянули о том, что происходит (или не происходит) с node переменной. (Вы только что внесли изменение. спасибо)