Доступ к нулевым указателям, чтобы проверить, является ли связанный список пустым в C++

Я беру курс по структурам данных с использованием C++, и мы должны реализовать простую структуру с одним связанным списком.

У меня есть все другие методы, но когда я проверяю, является ли список пустым, когда он на самом деле, программа падает, вызывая ошибку сегментации.

Когда список пуст, моя структура связанного списка должна выглядеть так:

HEAD -> NULL

Тогда как если он не пустой, он должен выглядеть так:

ГОЛОВА -> ...... -> NULL

Мой isListEmpty() выглядит так:

bool singleList::isListEmpty(void) {
    return (head->next == NULL);
}

Я почти уверен, что ядро ​​сбрасывается, когда я пытаюсь получить доступ к нулевому указателю, но я не уверен, где. Любые предложения о том, где я должен искать?

Благодарю.

--Edited--

Извините, я не достаточно ясно

Я уверен, что сама голова НЕ является нулевым указателем, потому что, проверяя, работает ли мой код, я работал с чем-то вроде:

list.list_insert_front(guy1);
list.list_insert_front(guy2);
list.list_remove(guy1);
list.list_remove(guy2);
list.isListEmpty(); //This line causes segmentation fault.

3 ответа

Решение

В большинстве случаев в пустом списке head является nullне этоnext,

Посмотрите дважды на инициализацию и решите, нужно ли вам проверять head или этоnext за nullность.

Заголовок - это указатель, который отслеживает первый узел списка. Если список пуст, то head должен указывать на ноль.

Когда вы пытаетесь получить доступ к head->next, косвенно вы проверяете, существует ли следующий из первого узла (второго узла) или нет.

Чтобы узнать, пуст ли список или нет, вам нужно проверить, является ли head пустым.

bool singleList::isListEmpty(void) {
    return (head == NULL);
}

Насколько я понимаю, даже если у вас должен быть отдельный головной узел, он будет нулевым каждый раз, когда список пуст.

Он будет указывать на первый узел списка только в том случае, если список не пуст.

пример:

СПИСОК: A->B->C->...->Z->null. В этом случае ваша голова будет указывать на A. (Скорее, ваша HEAD будет A. например, head = A)

СПИСОК: ноль (голова = ноль)

Другие вопросы по тегам