Eliminar un nodo de una lista simple en C: ejercicio resuelto

Eliminar un nodo de una lista simple en C: ejercicio resuelto

Si buscas eliminar un nodo de una lista simple en c: ejercicio resuelto, aquí tienes un caso práctico, compilable y pensado para explicar la idea que realmente se reutiliza.

Enunciado

Elimina el valor 30 de la lista 10 -> 20 -> 30 -> 40.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>

typedef struct Nodo {
    int valor;
    struct Nodo *sig;
} Nodo;

Nodo *nuevo_nodo(int valor) {
    Nodo *n = (Nodo *)malloc(sizeof(Nodo));
    if (!n) {
        return NULL;
    }
    n->valor = valor;
    n->sig = NULL;
    return n;
}

Nodo *eliminar_valor(Nodo *cabeza, int valor) {
    Nodo *actual = cabeza;
    Nodo *previo = NULL;

    while (actual && actual->valor != valor) {
        previo = actual;
        actual = actual->sig;
    }
    if (!actual) {
        return cabeza;
    }

    if (!previo) {
        cabeza = actual->sig;
    } else {
        previo->sig = actual->sig;
    }
    free(actual);
    return cabeza;
}

void imprimir(Nodo *cabeza) {
    for (Nodo *p = cabeza; p; p = p->sig) {
        printf("%d", p->valor);
        if (p->sig) {
            printf(" ");
        }
    }
    printf("\n");
}

void liberar(Nodo *cabeza) {
    while (cabeza) {
        Nodo *tmp = cabeza;
        cabeza = cabeza->sig;
        free(tmp);
    }
}

int main(void) {
    Nodo *cabeza = nuevo_nodo(10);
    cabeza->sig = nuevo_nodo(20);
    cabeza->sig->sig = nuevo_nodo(30);
    cabeza->sig->sig->sig = nuevo_nodo(40);
    cabeza = eliminar_valor(cabeza, 30);
    imprimir(cabeza);
    liberar(cabeza);
    return 0;
}

Salida esperada

1
10 20 40

Errores frecuentes

  • No probar casos borde con entradas pequeñas o vacías.
  • No validar bien índices, punteros o límites según el caso.
  • Quedarte con la mecánica sin entender el patrón general.

Aplicación práctica

Este tipo de ejercicio entrena la manipulación correcta de referencias y casos borde en estructuras enlazadas o jerárquicas.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Este ejercicio sirve para práctica real?

Sí. Está planteado para cubrir un patrón reutilizable en C, no solo un caso artificial.

¿Cómo practicarlo mejor?

Modifica los datos de entrada, añade casos límite y reescríbelo desde cero sin mirar la solución.

¿Cómo practicar este tipo de ejercicio para mejorar más rápido?

Empieza con entradas pequeñas, prueba casos límite (vacío, un elemento y capacidad máxima) y luego reescribe la solución sin copiarla.