это работает сейчас?

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. Но это все равно не работает.

Я столько часов пытался это исправить, и отладка даже не помогла. Может кто-нибудь, пожалуйста, помогите? Спасибо вам большое!

Ответы на вопрос(2)

Ваш ответ на вопрос