Я пытаюсь обернуть голову вокруг связанных списков, и у меня есть этот пример кода здесь:
public class SinglyLinkedListNode {
public int data;
public SinglyLinkedListNode next;
public SinglyLinkedListNode(int data) {
this.data = data;
this.next = null;
}
public void Print() {
Console.WriteLine(data);
if(next != null) {
next.Print();
}
}
}
public class SinglyLinkedList {
public SinglyLinkedListNode headNode;
public SinglyLinkedList() {
headNode = null;
}
public void Print() {
if(headNode != null) {
headNode.Print();
}
}
}
class Program {
static void Main(string[] args) {
SinglyLinkedList list = new SinglyLinkedList();
int listCount = 5;
for(int i = 0; i < listCount; i++) {
int listItem = i + 1;
SinglyLinkedListNode list_head = InsertNodeAtTail(list.headNode, listItem);
list.headNode = list_head;
}
list.Print();
}
static SinglyLinkedListNode InsertNodeAtTail(SinglyLinkedListNode head, int data) {
if (head == null) {
head = new SinglyLinkedListNode(data);
return head;
} else {
var temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = new SinglyLinkedListNode(data);
return head;
}
}
}
в методе InsertNodeAtTail в операторе else, где он в основном хранит переданный в headNode как временныйпеременная и в самом ее конце она устанавливает временные переменные, следующий указатель на новые данные, которые передаются, и затем возвращает заголовок.В этом сценарии как head отслеживает изменения в переменной temp?
Когда я отлаживаю это и проверяю возвращаемое значение head, в нем есть все изменения, которые я сделал с переменной temp, но значение head никогда не былодействительно изменено / использовано, кроме той части, где оно присваивается переменной temp.
Пример, скажем, мы получили список 1 -> 3 -> 5 -> и добавление в 6 6 добавляется в temp.next и при возврате head значение head содержит 1 -> 3 -> 5 -> 6, но мы никогда ничего не делали для head?Все изменения были внесены в переменную temp.
Извините, если это глупый вопрос, но я просто не понимаю, как это работает.
Спасибо