Итак, у вас есть класс с именем Node с двумя переменными экземпляра, которые называются next и data. Их называют переменными экземпляра, потому что они принадлежат экземплярам этого класса, а не самому классу. То есть ваш класс - это в основном шаблон (или схема) для объектов, каждый из которых будет иметь свое собственное значение данных и следующее значение.
Чтобы создать экземпляр класса Node, вам нужно вызвать конструктор и передать необходимые параметры. В вашем случае конструктор:
public Node(int d) {
data = d;
}
Чтобы вызвать этот конструктор, вы используете новое ключевое слово (в Java, я полагаю), например:
Node x = new Node(10);
И обратите внимание, что вы должны предоставить целочисленное значение конструктору. В теле конструктора (между {}) вы видите, что переменным данным присваивается значение в d, которое является значением, которое вы передаете в конструктор, в данном примере это значение 10. Теперь у вас есть объект типа Узел со значением 10 в качестве данных и нулевой следующий узел.
Теперь для этого объекта вы можете вызвать метод appendToTail (). Допустим, мы делаем это:
x.appendToTail(20);
Позволяет отслеживать, что происходит.
Node end = new Node(d);
Создается новый узел с именем end, и мы устанавливаем значение 20 в data (помните, что d имеет значение 20 на данный момент, потому что это значение мы передали, когда вызывали метод). Это полностью независимый узел от x со своим собственным уникальным значением для данных.
Node n = this;
это самостоятельная ссылка на текущий объект. Поскольку мы вызвали этот метод для x, то это тот же объект, что и для x.
while (n.next != null) {
n = n.next;
}
Этот цикл while начнет искать конец списка, переходя от текущего узла к следующему узлу, пока следующий узел не станет нулевым. Поскольку единственный созданный нами узел - это x, тогда n.next фактически равен нулю, поэтому цикл while не выполняется в этот раз.
n.next = end;
Теперь мы устанавливаем следующее значение n (то есть x) для конца узла, который был создан. Теперь у вас есть такой список:
10 -> 20 -> null
Предположим, вам нужно было сделать следующий звонок:
x.appendToTail(30);
Затем происходит нечто подобное, за исключением того, что когда вы получаете в цикле while значение n.next не равно нулю, вы переходите в тело цикла и назначаете n для указания на n.next, который в нашем примере является узлом с 20. Следующая итерация цикла выдаст нулевое значение, поэтому цикл завершится, и для нового узла с данными 30 будет установлено следующее значение последнего узла в списке. Итак, у вас будет:
10 -> 20 -> 30 -> null