c - La función de lista enlazada no me deja acceder a los índices después de su uso

CorePress2024-01-25  408

Buenas noches. Me encontré con el siguiente problema al intentar comprender la lógica de las listas vinculadas. Estoy usando esta función para eliminar un nodo de la lista vinculada.

void removeNode(ListNode* after)
{
        ListNode* toDelete;
        toDelete = after->next;
        after->next = toDelete->next;
        free(toDelete);
    
}

Así es como llamo a la función:

while (temp2 != NULL)
    {
        if (temp3 == lst.head && temp3->dataPtr[0] >= '0' && temp3->dataPtr[0] <= '9')
        {
            lst.head = temp3->next;
            ListNode* temp4 = temp3;
            temp3 = temp3->next;
            free(temp4);
            temp2 = temp2->next;
        }
        if (temp2->dataPtr[0] >= '0' && temp2->dataPtr[0] <= '9')
        {
            if (temp2 == lst.head)
            {
                lst.head = temp2->next;
                ListNode* temp3 = temp2;
                temp2 = temp2->next;
                free(temp3);
            }
            else
            {
         ----------------->       removeNode(temp3);
                temp2 = temp2->next;
                temp3 = temp3->next;
            }
        }
        else
        {
            temp2 = temp2->next;
            temp3 = temp3->next;
        }
    }

El problema que encontré: después de usar la función removeNode, ¡ya no puedo acceder a los nodos!

¿Alguien puede detectar mi error y corregirme? Estoy intentando resolver esto durante aproximadamente dos horas, pero no se me ocurre ningún posible error que haya escrito. El resto del programa funciona bien, todos los demás "si" o "si", es sólo esta línea específica la que no funciona.

Muchas gracias de antemano.



------------------------------------

Parece haber un error en la función removeNode. Por lo que veo, estás intentando eliminar el nodo que viene después del nodo dado en el argumento de la función. La línea:

after-> next = after-> next;

debe ser reemplazado por:

after->next = (after->next)->next;

para poder eliminar la conexión al nodo a eliminar.



------------------------------------

Gracias por tu respuesta, usuario3777427. Actualicé la línea marcada (en el primer mensaje) a lo siguiente y funcionó.

 temp2 = temp2->next;
                    ListNode* toDelete;
                    toDelete = temp3->next;
                    temp3->next = temp3->next->next;
                    free(toDelete);

0

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare