Использование указателей для удаления элемента из односвязного списка
В недавнемСлэшдот Интервью Линус Торвальдс привел пример того, как некоторые люди используют указатели таким образом, чтоЯ действительно не понимаю, как правильно их использовать.
К сожалению, так как яЯ один из людей, которых онЯ не смог понять его пример: я
Мы видели слишком много людей, которые удаляют односвязную запись в списке, отслеживая "предыдущая» запись, а затем удалить запись, делая что-то вроде
if (prev)
prev->next = entry->next;
else
list_head = entry->next;
и всякий раз, когда я вижу такой код, я просто идуЭтот человек нене понимаю, указатели, И это'К сожалению, довольно часто. Люди, которые понимают указатели, просто используют "указатель на запись указательи инициализируйте это адресом list_head. И затем, проходя по списку, они могут удалить запись без использования каких-либо условий, просто выполнив
*pp = entry->next
Может кто-нибудь дать немного больше объяснений о том, почему этот подход лучше, и как он может работать без условного утверждения?