32. Linked list

Crea una implementación de una "Linked List" (lista enlazada simple) utilizando el enfoque de programación funcional (inmutable) sin bucles.

Deberás definir la estructura de un nodo y las operaciones básicas de una lista enlazada:

  • Crear una lista vacía.

  • Añadir un elemento al principio.

  • Añadir un elemento al final.

  • Buscar un elemento.

  • Eliminar un elemento.

  • Convertir la lista enlazada a una lista Python estándar.

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

    def __repr__(self):
        return f"Nodo({self.valor}, {self.siguiente.valor if self.siguiente else None})"

# Funciones a implementar (ejemplos de signaturas)
def crear_lista_enlazada_vacia():
    # Devuelve una lista enlazada vacía (puede ser None o un Nodo especial)
    pass

def anadir_inicio(lista: Nodo, valor) -> Nodo:
    # Devuelve una NUEVA lista enlazada con el valor al inicio
    pass

def anadir_final(lista: Nodo, valor) -> Nodo:
    # Devuelve una NUEVA lista enlazada con el valor al final
    pass

def buscar_elemento(lista: Nodo, valor) -> bool:
    # Devuelve True/False si el elemento está en la lista
    pass

def eliminar_elemento(lista: Nodo, valor) -> Nodo:
    # Devuelve una NUEVA lista enlazada sin la primera ocurrencia del valor
    pass

def a_lista_python(lista: Nodo) -> list:
    # Convierte la lista enlazada a una lista de Python
    pass

# Ejemplo de uso
# lista_vacia = crear_lista_enlazada_vacia()
# lista_1 = anadir_inicio(lista_vacia, 10) # 10 -> None
# lista_2 = anadir_inicio(lista_1, 20)    # 20 -> 10 -> None
# lista_3 = anadir_final(lista_2, 5)     # 20 -> 10 -> 5 -> None
# buscar_elemento(lista_3, 10) # True
# lista_sin_10 = eliminar_elemento(lista_3, 10) # 20 -> 5 -> None
# a_lista_python(lista_sin_10) # [20, 5]

Ratoncito

Implementa las operaciones anadir_inicio, buscar_elemento y a_lista_python de forma recursiva e inmutable.

Dragón

Implementa anadir_final y eliminar_elemento de forma recursiva e inmutable. Considera la eficiencia de estas operaciones, especialmente anadir_final, en una lista enlazada inmutable.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Visitantes en tiempo real

Estás solo: 🐱