Como excluir dois itens em uma linha em uma lista vinculada

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

insira a descrição da imagem aqui

Oi, estou escrevendo uma função que excluiria dois valores em uma linha em uma lista vinculada se os dois valores forem iguais. Meu código parece parar de funcionar quando a entrada é algo como "1 -> 2 -> 3 -> 3 -> 4 -> nullptr". (A saída deve ser 1 -> 2 -> 4 -> nullptr). Ele sai sem me dar nenhum erro. E eu passei pela depuração linha por linha. Ele de repente sai e mostrou "variáveis não disponíveis".

Acho que é o problema que, quando excluo p, l aponta para o lixo, o que causa o problema. Então, tentei uma maneira diferente de fazer com que aponte para excluir -> a seguir. Mas ainda não funciona.

Eu tentei muitas horas para corrigi-lo e a depuração nem ajudará. Alguém pode ajudar por favor? Muito obrigado!

questionAnswers(2)

yourAnswerToTheQuestion