Я не понимаю, почему метод ниже работает. Как следует из названия, он удаляет все нулевые значения в связанном списке, а передняя часть списка называется head
. Я понимаю, что псевдоним переменной head
создается с Node<E> current = head
, но я не могу понять, как этому методу удается сохранить исходную переменную head. Судя по всему, с каждой итерацией ток становится все меньше и меньше (current = current.next
или current.next = current.next.next
), но каким-то образом полностью неповрежденная и точная переменная head
остается при распечатке связанного списка. Я уверен, что этот ответ должен быть очень простым, но он ускользает от меня.
public void remove_nulls() {
while (head!=null && head.data==null) {
removeFirst();
}
if (head==null) {
return;
}
// List is non-empty and does not start with a null item
Node<E> current=head;
while (current.next!=null) {
if (current.next.data==null) {
current.next=current.next.next;
size--;
} else {
current = current.next;
}
}
}