Operaciones en Single Link List: Búsqueda, Inserción y Eliminación
Clase 12 de 23 • Curso de Estructuras de Datos Lineales con Python
Resumen
¿Cómo emular índices en listas enlazadas?
Cuando trabajas con listas enlazadas, una de las diferencias clave respecto a las estructuras de datos como los arrays es que las listas enlazadas no tienen un índice por defecto. A diferencia de un array que nos permite acceder a sus elementos a través de un índice, en las listas enlazadas necesitamos emular este comportamiento. Para resolver este desafío, se utiliza una técnica común: la variable auxiliar, conocida como prop
, que actúa como una sonda para recorrer los nodos de la lista.
¿Cómo realizar un recorrido en single link list?
Realizar un recorrido en una single link list implica moverse de nodo a nodo utilizando punteros. Al inicio, se establece una variable head
que apunta al nodo inicial. Se genera una iteración que continúa mientras head
no sea None
. Durante este ciclo se puede imprimir o manipular la data de cada nodo:
prop = head
while prop is not None:
print(prop.data)
prop = prop.next
¿Cómo buscar un elemento en la lista enlazada?
La búsqueda de un elemento en una single link list se basa en recorrer todos los nodos hasta encontrar el elemento deseado. Si se desea buscar el elemento '2', se hace de la siguiente manera:
prop = head
target_item = 2
while prop is not None and target_item != prop.data:
prop = prop.next
if prop is not None:
print(f"El elemento objetivo {target_item} ha sido encontrado.")
else:
print(f"{target_item} no se encuentra en la lista.")
¿Cómo reemplazar un elemento en la lista?
Remplazar un elemento requiere primero buscarlo y luego asignar el nuevo valor. Por ejemplo, si deseamos reemplazar el '3' con la letra 'Z':
prop = head
target_item = 3
new_item = 'Z'
while prop is not None and target_item != prop.data:
prop = prop.next
if prop is not None:
prop.data = new_item
print(f"{new_item} replace the old value in the node number {target_item}")
else:
print(f"{target_item} no se encuentra en la lista")
¿Cómo manipular nodos en la lista enlazada?
Manipular nodos implica insertar, eliminar o mover nodos dentro de la lista. Esta sección aborda cómo insertar nodos al inicio o al final de la lista, además de eliminarlos desde distintas posiciones.
¿Cómo insertar un nuevo elemento al inicio?
Para insertar un nuevo nodo al principio, puedes redefinir head
apuntándolo al nuevo nodo que ya tiene head
como su nodo siguiente:
new_node = Nodo('F')
new_node.next = head
head = new_node
¿Cómo insertar al final y en una posición específica?
Para insertar al final sin un índice, utiliza un bucle para llegar al último nodo y luego conecta el nuevo nodo:
new_note = Nodo('K')
if head is None:
head = new_note
else:
prop = head
while prop.next is not None:
prop = prop.next
prop.next = new_note
Para insertar en una posición específica, es crucial tener un mecanismo que recorra los nodos y ubique el índice de inserción:
index = 3 # Posición deseada
prop = head
nuevo_nodo = Nodo('Valor')
while index > 1 and prop.next is not None:
prop = prop.next
index -= 1
nuevo_nodo.next = prop.next
prop.next = nuevo_nodo
¿Cómo eliminar un nodo de la lista?
Para eliminar el nodo al inicio, se realiza el ajuste del puntero head
:
remove_item = head.data
head = head.next
Para eliminar al final o desde una posición específica, se debe tener un control sobre el nodo actual y el siguiente, pero prevenir que el código se interrumpa antes de su tiempo:
# Para eliminar en la última posición
prop = head
while prop.next.next is not None:
prop = prop.next
prop.next = None
Con estas instrucciones, mejorarás tu comprensión y dominio de las listas enlazadas. Te alentamos a que practiques y explores estas operaciones para incorporarlas como métodos dentro de tus propias implementaciones. Seguir aprendiendo sobre estructuras de datos fortalecerá tus habilidades como desarrollador. ¡Sigue adelante!