Использование указателей для удаления элемента из односвязного списка

В недавнемСлэшдот Интервью Линус Торвальдс привел пример того, как некоторые люди используют указатели таким образом, чтоЯ действительно не понимаю, как правильно их использовать.

К сожалению, так как яЯ один из людей, которых онЯ не смог понять его пример: я

Мы видели слишком много людей, которые удаляют односвязную запись в списке, отслеживая "предыдущая» запись, а затем удалить запись, делая что-то вроде

if (prev)
    prev->next = entry->next;
else
    list_head = entry->next;

и всякий раз, когда я вижу такой код, я просто идуЭтот человек нене понимаю, указатели, И это'К сожалению, довольно часто. Люди, которые понимают указатели, просто используют "указатель на запись указательи инициализируйте это адресом list_head. И затем, проходя по списку, они могут удалить запись без использования каких-либо условий, просто выполнив

*pp = entry->next

Может кто-нибудь дать немного больше объяснений о том, почему этот подход лучше, и как он может работать без условного утверждения?

Ответы на вопрос(7)

Ваш ответ на вопрос