это работает сейчас?
void delete_double (LN<T>*& l) {
if (l == nullptr)
return;
LN<T> *p = l;
while ( p -> next != nullptr && p -> next -> next != nullptr)
{
if (p -> value == p -> next -> value) // the current value is equal to the next value in the linked list
{
if (p == l) // when the first two values are the same // not sure if it is correct
{
l = l -> next -> next;
}
else // Problem should be here
{
LN<T> *to_delete = p; // Also tried this (doesn't work)
p = p->next;
delete to_delete; // LN<T>* to_delete = p;
// LN<T>* to_delete2 = p -> next;
LN<T> *to_delete1 = p; // l = to_delete2 -> next;
p = p->next; // delete to_delete;
delete to_delete1; // delete to_delete2;
}
}
else
{
p = p-> next;
}
}
}
// Image below is my output
Привет, я пишу функцию, которая удаляет два значения в строке в связанном списке, если два значения одинаковы. Кажется, мой код перестает работать, когда ввод выглядит как «1 -> 2 -> 3 -> 3 -> 4 -> nullptr» (вывод должен быть 1 -> 2 -> 4 -> nullptr). Он выходит без каких-либо ошибок. И я прошел отладку построчно, он просто неожиданно завершил работу и показал, что «переменные недоступны».
Я предполагаю, что это проблема, что, когда я удаляю p, l указывает на мусор, который вызывает проблему. Поэтому я попробовал другой способ заставить l указать на to_delete -> next. Но это все равно не работает.
Я столько часов пытался это исправить, и отладка даже не помогла. Может кто-нибудь, пожалуйста, помогите? Спасибо вам большое!