Это Неопределенное поведение .
Вы не инициализировали узел head
перед использованием ( live ):
Node* head = nullptr;
Итак, while
l oop не заканчивается, потому что head
содержит некоторое значение мусора при запуске.
Кроме того, вы также не инициализируете указатель next
первого узла (head
). Прямо сейчас, это не вызывает проблемы, потому что это не используется. Но если вы начнете использовать это, это вызовет проблемы, то есть больше UB. Итак, вам нужно инициализировать это в конструкторе, например:
struct Node {
Node() : data{0}, next{nullptr} {}
int data;
Node* next;
};
Или вы можете использовать инициализацию элемента по умолчанию следующим образом:
struct Node {
int data {0};
Node* next {nullptr};
};
Обратите внимание, что видимость по умолчанию для struct
равна public
, поэтому вам не нужно упоминать, что, если в одной и той же struct
.
нет также спецификаторов доступа private
, public
и protected
. в C ++ вы можете сделать:
Node* next;
вместо
struct Node* next;
Вот пример с вышеуказанными изменениями: https://godbolt.org/z/uVD76J
Соответствующий поток: