Ваш метод инициализации (конструктор) не выполняет то, что должен.При построении этого типа списка голова и хвост должны указывать на ноль, поскольку список пуст.Я не уверен, что делает «prevToCurr», но я не думаю, что списки используют что-то подобное, поэтому я бы избавился от этого:
Playlist::Playlist() {
head = null;
tail = null;
size = 0;
}
Для простоты обработайте push_front () в 2 случаях: когдасписок пуст, и когда в списке есть узлы.
- Если список пуст, все, что вам нужно сделать, это сделать так, чтобы голова и хвост указывали на новый узел.
- Когда списокне пусто, вы указываете предыдущую точку заголовка на новый узел и обновляете заголовок списка.
будет выглядеть так:
Playlist *Playlist::push_front(PlaylistNode *p) {
if (size == 0) {
head = p;
tail = p;
}
else {
head->insertNext(p);
head = p;
}
size++;
return this;
}
Ваш метод push_back () будетреализован почти так же, как push_front, обновляя хвост вместо головы и делая новый хвост, указывающий на старый, я уверен, что вы можете понять это.
Вы не даете достаточно информации, поэтому ясобираюсь угадать ваш PlaylistNode :: insertNext устанавливает следующий узел.В этом случае, то, что вы делаете здесь, это устанавливает следующий указатель на узел, указанный в качестве аргумента:
PlaylistNode *PlaylistNode::insert_next(PlaylistNode *p) {
this->next = p;
return this;
}
Это должно работать более или менее, если вы правильно создаете свои PlaylistNodes (ненажмите на один и тот же узел 2 раза, в результате вы получите узел, указывающий рядом с собой, как указано в комментариях).