Я практиковал проблемы с Cracking the Coding Interview, и я придумал решение проблемы с просьбой удалить средний узел в связанном списке.Установка текущего узла на нуль?
public void deleteMidNode(Node mid){
if(mid == head || mid.next==null){
return;
}
Node current = mid;
while(current.next.next!=null){
current.data = current.next.data;
current = current.next;
}
current.next = null;
}
Теперь этот код действительно работает - я его протестировал. Тем не менее, мне очень интересно, почему я могу установить current.next
обнулить, но если бы я должен был сделать это он не работает:
public void deleteMidNode(Node mid){
if(mid == head || mid.next==null){
return;
}
Node current = mid;
while(current.next!=null){
current.data = current.next.data;
current = current.next;
}
current = null;
}
Может кто-нибудь сказать мне, почему я не могу установить текущий узел в null
?
Почему вы нарушаете, если это голова или хвост? – weston
'current = null' просто переназначает значение этой переменной. Он не изменяет базовый объект «Node». –
Это неверно, удаление элемента из связанного списка должно быть процедурой постоянного времени O (1). Вы перемещаете данные вокруг, вызывая их O (n) – weston