Una lista enlazada se compone de nodos donde cada nodo tiene dos partes:
Los nodos se organizan de forma secuencial, cada uno apuntando al siguiente. El último nodo apunta a nulo para indicar el final.
Esta estructura dinámica permite inserción y eliminación eficiente de nodos.
Existen varios tipos:
Simplemente enlazada: Cada nodo apunta al siguiente. Son útiles para colas (queues) y pilas (stacks).
Doblemente enlazada: Cada nodo tiene referencia al siguiente y al anterior. Permiten recorrer en ambos sentidos.
Circular: El último nodo apunta al primero formando un ciclo. Útiles para buffers circulares.
Insertar: Agregar nodos al inicio, final o medio de la lista.
Eliminar: Quitar nodos por valor o posición.
Buscar: Encontrar nodos por valor recorriendo la lista.
Recorrer: Iterar los nodos accediendo por las referencias.
Las listas enlazadas se pueden implementar de la siguiente manera:
Usa la clase ListNode para representar nodos:
class ListNode:
def __init__(self, value):
self.value = value
self.next = None
Luego para crear y usar una lista se define una clase LinkedList con métodos para las operaciones.
class LinkedList:
def __init__(self):
self.head = None
def add_to_start(self, new_value):
new_node = ListNode(new_value)
new_node.next = self.head
self.head = new_node
def print(self):
current = self.head
while current != None:
print(current.value)
current = current.next
def search(self, searched_value):
current = self.head
while current != None:
if current.value == searched_value:
return True
current = current.next
return False
#...other methods
Con esta clase LinkedList podemos crear una lista, agregar nodos, imprimirla, buscar elementos, etc.
Se podrían agregar otros métodos como insertar al final, eliminar por valor, obtener por índice, etc. Pero esto da una idea de cómo encapsular la funcionalidad de la lista enlazada en una clase. Como práctica, podés intentar agregar estos métodos por tu cuenta, ¡no dudes en dejar tus comentarios y contactarte si necesitas ayuda!
Ventajas:
Desventajas:
Las listas enlazadas son una estructura de datos versátil para almacenar secuencias dinámicas de elementos. Tener un buen manejo de estas listas, sus operaciones y usos es indispensable para cualquier programador.
¡Gracias por llegar hasta acá! Espero que este recorrido por el universo de la programación haya sido tan apasionante para vos como lo fue para mí escribirlo.
Nos encantaría escuchar lo que pensás, así que no te quedes callado/a, dejá tus comentarios, sugerencias y todas esas ideas copadas que seguro se te ocurrieron.
Y para ir más allá de estas líneas, date una vuelta por los ejemplos prácticos que preparamos para vos. Vas a encontrar todo el código y los proyectos en nuestro repositorio de GitHub learn-software-engineering/examples.
¡Gracias por ser parte de esta comunidad de aprendizaje. Seguí programando y explorando nuevos territorios en este fascinante mundo de la computación!