Почему каждый раз, когда мы создаем новый узел p.next, нам нужно присвоить null this.next?
при добавлении и удалении узлов, мы должны убедиться, что узлыне указывайте на непреднамеренные узлы.они могут указывать на некоторые узлы.
почему нам нужно установить p = p.next так, чтобы он указывал на тот же узел
, чтобы найти и сохранить свою позицию в списке, пока вы пересекаете список,Вы начинаете с головы и продолжаете к остальным узлам.если p=p.next
, как вы собираетесь обходить список?
мы не можем просто установить tail = p.next, который является последним после завершения цикла for.
Нет, мы не можем, потому что в этом случае p.next
эквивалентно p.p.next
, потому что p
было установлено на p.next
внутри цикла.протестируйте его, добавив следующее перед tail=p
, вы должны получить null
System.out.println(p.next);
Отредактировано:
ваш список является односвязным списком, что означает каждыйузел, кроме хвоста, должен иметь указатель на следующий узел, вы начали с
head = new Node<>(a[i], null);
Node<T> p = head;
, в этом случае p
и head
указывают Node 0
, см. изображение ниже.если следующий узел в массиве не равен нулю, давайте посмотрим, что происходит в цикле for
p.next = new Node<>(a[i], null);
p = p.next;
В этом случае p.next
указывает на Node 1
(см. изображение ниже), где как p
которые указывали на Node 0
теперь настроены на Node 1
.так что оба указывают на «Узел 1».последний:
tail = p;
Вы сказали, что почему бы нам не просто tail=p.next
?Нет, мы не можем, потому что в этом случае p.next
эквивалентно p.p.next
, потому что p
было установлено на p.next
внутри цикла.

читать о односвязном списке здесь