es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Elimine todos los nodos duplicados en una lista enlazada no ordenada.

El objetivo principal de mi código es tomar datos del usuario y luego buscar dentro de una lista enlazada simple un objetivo y eliminar todos los nodos que sean iguales a dicho objetivo. Esta es también la base de la lista enlazada simple:

typedef struct Node
{
int data;
struct Node *next;
}no;

Entrada: 1, 2, 3, 2, 5 –> a eliminar = 2

Entonces, la nueva lista enlazada es: 1, 3, 5

Este es mi función de eliminación de duplicados que he escrito.
Funciona para elementos objetivo que están en el medio de la lista enlazada, pero cuando el primer nodo, que es la cabeza de la lista es el objetivo, no lo elimina o pierde la dirección de la cabeza y he intentado muchas formas de guardar la cabeza de la lista para que no se pierda.

También no funciona para la situación en la que el último nodo es el objetivo.

He tenido problemas con esta solución y no he podido resolverlo, así que estaría feliz y agradecido si alguien me ayuda con esto.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Problema con la función to-delete en Listas Enlazadas Simples

    El propósito principal del código es tomar datos de entrada del usuario y buscar en la lista enlazada simple para encontrar el objetivo y eliminar todos los nodos que son iguales al objetivo. La siguiente es la base de la lista enlazada simple dada:

    typedef struct Node
    {
        int data;
        struct Node *next;
    }no;
    

    Los datos de entrada son, 1, 2, 3, 2, 5 y los datos objetivo a eliminar son 2. El resultado esperado es una nueva lista enlazada: 1, 3, 5.

    La función to-delete escrita para lograr lo mismo es:

    void* toDElduplicatedlinkedlist (no* firstNode, int target)
    {
        no* current = firstNode;
        no* ptemp;
    
        while ( NULL != current->next)
        {
            if (firstNode->data == target)
            {
                current = firstNode->next;
                free(firstNode);
            }
            else if (current->next->data == target)
            {
                ptemp = current->next;
                current->next= current->next->next;
                free(ptemp);
            }
            current = current->next;
        }
    }
    

    Sin embargo, la implementación actual de la función no funciona en dos casos:

    1. Cuando firstNode, que es la cabeza de la lista, es el objetivo. En este caso, la función no lo elimina o pierde la dirección de la cabeza.
    2. Cuando el objetivo es el último nodo en la lista.

    El problema es que la cabeza de la lista siempre debe ser preservada. La función debe ser modificada para manejar estos casos especiales.

Comments are closed.