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.
Apóyame en Ko-fi