Для такого рода вещей вам нужен указатель на указатель, чтобы убрать множество ненужных исключений в вашей реализации:
LLNode *ll = NULL;
void addToLL(Elem *e)
{
LLNode** current = ≪
// While the current pointer to pointer is mapped to something,
// step through the linked list.
while (*current)
current = &(*current->next);
// At this point current is pointing to a NULL pointer and can
// be assigned to.
*current = new LLNode(e);
}
Причина, по которой указатели NULL
, заключается в том, чтов false и позволяет выполнять простые проверки, такие как while (*current)
, без лишних затрат.В CPU это обычно заканчивается реализацией операции test-if-zero.
Указатели имеют значение NULL, только если они инициализированы как таковые.В C они часто не определены, если не инициализированы должным образом, и обращение к неинициализированному указателю не приводит к катастрофе.Вы должны убедиться, что любые указатели, которые вы определяете, всегда инициализируются чем-то допустимым перед их использованием.