12 - Proyecto final: lista simplemente enlazada

12.1 Implementar una lista completa

En este proyecto construimos una lista simplemente enlazada en Python con operaciones de inserción, eliminación, búsqueda, recorrido y limpieza. El código está listo para ejecutarse en el editor online.

# lista_completa.py

class Nodo:
    def __init__(self, valor):
        self.valor = valor
        self.sig = None


class Lista:
    def __init__(self):
        self.cabeza = None

    def insertar_inicio(self, valor):
        nuevo = Nodo(valor)
        nuevo.sig = self.cabeza
        self.cabeza = nuevo

    def insertar_final(self, valor):
        nuevo = Nodo(valor)
        if self.cabeza is None:
            self.cabeza = nuevo
            return
        reco = self.cabeza
        while reco.sig:
            reco = reco.sig
        reco.sig = nuevo

    def eliminar_valor(self, valor):
        if self.cabeza is None:
            return False
        if self.cabeza.valor == valor:
            victima = self.cabeza
            self.cabeza = victima.sig
            victima.sig = None
            return True
        reco = self.cabeza
        while reco.sig and reco.sig.valor != valor:
            reco = reco.sig
        if reco.sig is None:
            return False
        victima = reco.sig
        reco.sig = victima.sig
        victima.sig = None
        return True

    def buscar(self, valor):
        reco = self.cabeza
        while reco:
            if reco.valor == valor:
                return reco
            reco = reco.sig
        return None

    def imprimir(self):
        reco = self.cabeza
        while reco:
            print(reco.valor, end=" -> ")
            reco = reco.sig
        print("None")

    def limpiar(self):
        while self.cabeza:
            siguiente = self.cabeza.sig
            self.cabeza.sig = None
            self.cabeza = siguiente


def main():
    lista = Lista()
    lista.insertar_inicio(10)
    lista.insertar_final(20)
    lista.insertar_final(30)
    lista.imprimir()

    nodo = lista.buscar(20)
    if nodo:
        print(f"Encontrado: {nodo.valor}")

    lista.eliminar_valor(10)
    lista.imprimir()
    lista.limpiar()


if __name__ == "__main__":
    main()

Ejecuta el proyecto completo, modifica valores y observa cómo cambian los enlaces en cada operación.