Dangling Pointer:
(http://en.wikipedia.org/wiki/Dangling_reference)
Висячие указатели и дикие указатели в компьютерном программировании - это указатели, которые не указывают на действительный объект соответствующего типа. Это особые случаиНарушения безопасности памяти.
Повисшие указатели возникают, когда объект удаляется или освобождается, без изменения значения указателя, так что указатель по-прежнему указывает на место в памяти освобожденной памяти. Поскольку система может перераспределитьранее освобожденная память другому процессу, если исходная программа затем разыменовывает висячий указатель (теперь), это может привести к непредсказуемому поведению, поскольку память теперь может содержать совершенно другие данные.
В вашем ответе удалитьс данного узла вы фактически удаляете узел next , на который может ссылаться указатель. Вот как возникает проблема с висящим указателем.
(1) Нет внешних ссылок на список,как вы поясните в примечании. (2) Проблема с висящим указателемm может возникнуть, как сказал интервьюер.
Оба (1) и (2) не могут быть правильными одновременно.Это означает, что где-то есть недоразумение.
Об удалении последнего узла:
Но интервьюер снова спросил меня, что если я передам адрес последнего узла.Я сказал ему, поскольку следующим будет NULL, скопируйте этот NULL в поле данных вместе с адресом следующего узла, который также является NULL.
Я думаю, что вы путаете эти две вещи:(1) Указатель p, который указывает на NULL, (2) Узел связанного списка, который имеет NULL в своем поле данных.
Предположим, структура данных a -> b -> c -> d
.Запись NULL в поле данных d не будет волшебным образом заставлять c иметь в своем поле next
указатель NULL.
Вы можете удалить последний узел , если в связанном списке всегда есть специальный последний узел , который никогда не будет удален.Например, a -> b -> c -> d -> LAST
, где LAST имеет специальное значение в своем поле данных, которое обозначает, что это действительно последний элемент.Теперь, чтобы удалить d, вы можете удалить LAST и записать специальное значение в поле данных d.
Возможно, это именно то, что вы пытались сказать во время интервью, и в этом случае между вами и интервьюером должно было быть какое-то недопонимание.