Ваша непосредственная проблема, вы никогда не устанавливаете указатель нового узла previous
на nullptr
(проблема, которая, честно говоря, должна быть исправлена с помощью лучшего построенного цикла и / или правильного конструктора для Node
).Несмотря на это, здесь ...
template<typename T>
void LinkedList<T>::AddHead(const T &data)
{
Node* newNode = new Node;
newNode->data_ = data;
if (count == 0)
{
head = newNode;
tail = newNode;
head->next = nullptr;
head->previous = nullptr;
}
else
{
newNode->next = head;
newNode->previous = nullptr; // ADD THIS
head->previous = newNode;
head = newNode;
}
count = count + 1;
}
В этом все еще есть несколько вещей: утечки памяти, пустой copy-ctor и деструктор и т. Д., Но вышеприведенное является корнем текущего зла.Эта строка также может быть:
newNode->previous = head->previous;
, но, честно говоря, это просто сбивает с толку то, что вы делаете.Вы всегда сажаете свои новые узлы в начало списка, так что элемент previous
of said-same всегда будет nullptr
(по крайней мере, пока вы не начнете изучать циклические списки).