Las listas enlazadas son una de las estructuras de datos más utilizadas en cualquier lenguaje de programación. En este artículo, estudiaremos las listas enlazadas en detalle. Veremos cuáles son los diferentes tipos de listas enlazadas, cómo recorrer una lista enlazada, cómo insertar y eliminar elementos de una lista enlazada, cuáles son las diferentes técnicas para ordenar una lista enlazada, cómo revertir una lista enlazada, etc. .
Después de leer este artículo, debería poder descifrar todas las preguntas de la entrevista de la lista vinculada.
¿Qué es una lista vinculada?
Contenido
- 1 ¿Qué es una lista vinculada?
- 2 Listas vinculadas frente a matrices:
- 3 Lista vinculada única
- 4 Contando elementos
- 5 Elementos de búsqueda
- 6 Crear una lista vinculada
- 7 Eliminar elementos
- 8 Inversión de una lista vinculada
- 9 Conclusión
Antes de estudiar qué son las listas vinculadas, primero revisemos brevemente cómo las matrices almacenan datos. En las matrices, los datos se almacenan en ubicaciones de memoria contiguas. Por ejemplo, si el primer elemento de la matriz se almacena en el índice 10 de la memoria y tiene un tamaño de 15 bytes, el segundo elemento se almacenará en el índice 10 + 15 + 1 = índice 26. Por lo tanto, es sencillo atravesar una matriz.
Para encontrar el tercer elemento en una matriz, simplemente puede usar el índice inicial del primer elemento, más el tamaño del primer elemento, más el tamaño del segundo elemento, más 1.
Cómo almacenan datos las listas enlazadas
Las listas enlazadas, por otro lado, son diferentes. Listas vinculadas, no almacenan datos en ubicaciones de memoria contiguas. Para cada elemento en la ubicación de la memoria, la lista vinculada almacena el valor del elemento y la referencia o puntero al siguiente elemento. Un par del elemento de la lista enlazada y la referencia al siguiente elemento constituyen un node.
Por ejemplo, si un node consta de 34 | 10, significa que el valor del node es 30, mientras que el siguiente elemento se almacena en la ubicación de memoria «10». Para recorrer una lista vinculada, solo necesita conocer la ubicación de la memoria o la referencia del primer node, el resto de nodes se pueden recorrer secuencialmente usando la referencia al siguiente elemento en cada node.
La referencia al primer node también se conoce como node de inicio.
Listas vinculadas frente a matrices:
- Una lista vinculada es una estructura de datos dinámica, lo que significa que la memoria reservada para la lista de vínculos se puede aumentar o reducir en tiempo de ejecución. No se asigna memoria para una estructura de datos de lista enlazada de antemano. Siempre que se requiera agregar un nuevo elemento al enlace, la memoria para el nuevo node se crea en tiempo de ejecución. Por otro lado, en el caso de la matriz, la memoria debe asignarse por adelantado para un número específico de elementos. En los casos en que no hay suficientes elementos disponibles para llenar todo el índice de la matriz, se desperdicia espacio de memoria.
- Dado que las matrices requieren ubicaciones de memoria contiguas, es muy difícil quitar o insertar un elemento en una matriz, ya que las ubicaciones de memoria de una gran cantidad de elementos deben actualizarse. Por otro lado, los elementos de la lista vinculada no se almacenan en una ubicación de memoria contigua, por lo que puede actualizar fácilmente las listas vinculadas.
- Debido a su flexibilidad, una lista vinculada es más adecuada para implementar estructuras de datos como pilas, colas y listas.
Sin embargo, también hay algunas desventajas en la lista vinculada.
- Dado que cada elemento de la lista vinculada tiene que almacenar la referencia al siguiente elemento, se requiere algo de memoria adicional.
- A diferencia de las matrices, donde puede acceder directamente a un elemento, no puede acceder directamente a un elemento de la lista vinculada ya que la única información que tiene es la referencia al primer elemento. En términos de Big O, el tiempo de acceso en el peor de los casos es O (n).
En esta serie de artículos, estudiaremos los siguientes tipos de listas enlazadas junto con sus diferentes funcionalidades.
- Lista vinculada única
- Lista doblemente vinculada
- Lista enlazada circular
- Lista vinculada con encabezado
- Lista vinculada ordenada
En esta primera parte del artículo, nos centraremos en la lista enlazada única y sus diferentes operaciones.
Lista vinculada única
Creación de la clase de node
Creación de la clase de lista vinculada única
Recorrido de elementos de lista vinculada
Insertar elementos
Contar elementos
Buscar elementos
Crear una lista vinculada
Eliminar elementos
Invertir una lista vinculada
Lista vinculada única
Una sola lista vinculada es la más simple de todas las variantes de listas vinculadas. Cada node en una única lista vinculada contiene un elemento y una referencia al siguiente elemento y eso es todo.
En esta sección, veremos cómo crear un node para la lista vinculada única junto con las funciones para los diferentes tipos de inserción, recorrido y eliminación.
Crear la clase de node
Lo primero que debe hacer es crear una clase para los nodes. Los objetos de esta clase serán los nodes reales que insertaremos en nuestra lista vinculada. Sabemos que un node para una sola lista vinculada contiene el elemento y la referencia al siguiente node. Por lo tanto, nuestra clase de node contendrá dos variables miembro item
y ref
. El valor de item
se establecerá mediante el valor pasado a través del constructor, mientras que la referencia se establecerá inicialmente en nulo.
Ejecute el siguiente script:
class Node:
def __init__(self, data):
self.item = data
self.ref = None
Creación de la clase de lista vinculada única
A continuación, necesitamos crear una clase para la Lista vinculada. Esta clase contendrá los métodos para insertar, eliminar, recorrer y ordenar la lista. Inicialmente, la clase solo contendrá un miembro start_node
que apuntará al inicio o al primer node de la lista. El valor de start_node
se establecerá en nulo utilizando el constructor, ya que la lista vinculada estará vacía en el momento de la creación. El siguiente script crea una clase para la lista vinculada.
class LinkedList:
def __init__(self):
self.start_node = None
Ahora hemos creado una clase para nuestra lista única. El siguiente paso es agregar la función de inserción para insertar elementos en la lista vinculada. Pero antes de eso, agregaremos una función para recorrer una lista vinculada. Esta función nos ayudará a leer los datos de nuestra lista.
Atravesar elementos de lista vinculados
El código de Python para la función transversal es el siguiente. Agregue la función a continuación a la LinkedList
clase que creamos en la última sección.
def traverse_list(self):
if self.start_node is None:
print("List has no element")
return
else:
n = self.start_node
while n is not None:
print(n.item , " ")
n = n.ref
Veamos qué está sucediendo en la función anterior. La función tiene dos partes principales. Primero, verifica si la lista vinculada está vacía o no. El siguiente código comprueba que:
if self.start_node is None:
print("List has no element")
return
Si la lista vinculada está vacía, eso significa que no hay ningún elemento para iterar. En tales casos, la traverse_list()
función simplemente imprime la declaración de que la lista no tiene ningún elemento.
De lo contrario, si la lista tiene un elemento, se ejecutará el siguiente código:
n = self.start_node
while n is not None:
print(n.item , " ")
n = n.ref
Como dijimos anteriormente, la start
variable contendrá una referencia a los primeros nodes. Por lo tanto, inicializamos una variable n
con start
variable. A continuación, ejecutamos un ciclo que se ejecuta hasta que se n
convierte en ninguno. Dentro del ciclo, imprimimos el elemento almacenado en el node actual y luego establecemos el valor de la n
variable en n.ref
, que contiene la referencia al siguiente node. La referencia del último node es None
porque no hay ningún node después de eso. Por lo tanto, cuando se n
convierte en None
, el bucle termina.
Ahora, tenemos una función para recorrer una lista vinculada, veamos cómo podemos agregar elementos a una sola lista vinculada.
Insertar elementos
Dependiendo de la ubicación donde desee insertar un elemento, existen diferentes formas de insertar elementos en una única lista vinculada.
Insertar elementos al principio
La forma más sencilla de insertar un elemento en una única lista vinculada es agregar un elemento al principio de la lista. La siguiente función inserta un elemento al principio de la lista. Agregue esta función a la LinkedList
clase que creamos anteriormente.
def insert_at_start(self, data):
new_node = Node(data)
new_node.ref = self.start_node
self.start_node= new_node
En el script anterior, creamos un método insert_at_start()
, el método acepta un parámetro, que es básicamente el valor del elemento que queremos insertar. Dentro del método, simplemente creamos un objeto de la Node
clase y establecemos su referencia al start_node
ya que start_node
anteriormente estaba almacenando el primer node, que después de la inserción de un nuevo node al inicio se convertirá en el segundo node.
Por lo tanto, agregamos la referencia de start_node
a la ref
variable del nuevo node. Ahora que new_node
es el primer node, establecemos el valor de la start_node
variable en new_node
.
Insertar elementos al final
La siguiente función se utiliza para agregar un elemento al final de la lista vinculada.
def insert_at_end(self, data):
new_node = Node(data)
if self.start_node is None:
self.start_node = new_node
return
n = self.start_node
while n.ref is not None:
n= n.ref
n.ref = new_node;
En el script anterior, creamos una función insert_at_end()
, que inserta el elemento al final de la lista vinculada. El valor del elemento que queremos insertar se pasa como argumento a la función. La función consta de dos partes. Primero comprobamos si la lista enlazada está vacía o no, si la lista enlazada está vacía, todo lo que tenemos que hacer es establecer el valor de la start_node
variable en new_node
objeto.
Por otro lado, si la lista ya contiene algunos nodes. Inicializamos una variable n
con el node de inicio. Luego iteramos a través de todos los nodes en la lista usando un ciclo while como hicimos en el caso de la traverse_list
función. El ciclo termina cuando llegamos al último node. Luego establecemos la referencia del último node al recién creado new_node
.
Agrega la insert_at_end()
función a la LinkedList
clase.
Insertar artículo después de otro artículo
Es posible que necesitemos agregar un elemento después de otro elemento en una sola lista vinculada. Para hacerlo, podemos usar la insert_after_item()
función como se define a continuación:
def insert_after_item(self, x, data):
n = self.start_node
print(n.ref)
while n is not None:
if n.item == x:
break
n = n.ref
if n is None:
print("item not in the list")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
La insert_after_item()
función acepta dos parámetros: x
y data
. El primer parámetro es el elemento después del cual desea insertar el nuevo node, mientras que el segundo parámetro contiene el valor del nuevo node.
Comenzamos creando una nueva variable n
y asignándole una start_node
variable. A continuación, recorremos la lista vinculada usando el bucle while. El ciclo while se ejecuta hasta que se n
convierte en None
. Durante cada iteración, verificamos si el valor almacenado en el node actual es igual al valor pasado por el x
parámetro. Si la comparación devuelve verdadera, rompemos el ciclo.
A continuación, si se encuentra el elemento, la n
variable no lo será None
. La referencia de new_node
se establece en la referencia almacenada por n
y la referencia de n
se establece en new_node
. Agrega la insert_after_item()
función a la LinkesList
clase.
Insertar artículo antes que otro artículo
def insert_before_item(self, x, data):
if self.start_node is None:
print("List has no element")
return
if x == self.start_node.item:
new_node = Node(data)
new_node.ref = self.start_node
self.start_node = new_node
return
n = self.start_node
print(n.ref)
while n.ref is not None:
if n.ref.item == x:
break
n = n.ref
if n.ref is None:
print("item not in the list")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
En el script de arriba definimos la insert_before_item()
función. La función tiene tres partes. Veamos cada parte en detalle.
if self.start_node is None:
print("List has no element")
return
En el script anterior, verificamos si la lista está vacía. Si está realmente vacío, simplemente imprimimos que la lista no tiene ningún elemento y regresamos de la función.
A continuación, comprobamos si el elemento se encuentra en el primer índice. Mira el siguiente guión:
if x == self.start_node.item:
new_node = Node(data)
new_node.ref = self.start_node
self.start_node = new_node
return
Si el elemento después del cual queremos insertar un nuevo node se encuentra en el primer índice. Simplemente establecemos la referencia del node recién insertado en start_node
y luego establecemos el valor de start_node
en new_node
.
Finalmente, si la lista no lo es None
y el elemento no se encuentra en el primer índice, creamos una nueva variable n
y le asignamos una start_node
variable. A continuación, recorremos la lista vinculada usando el bucle while. El ciclo while se ejecuta hasta que se n.ref
convierte en None
. Durante cada iteración, verificamos si el valor almacenado en la referencia del node actual es igual al valor pasado por el x
parámetro. Si la comparación devuelve verdadera, rompemos el ciclo.
A continuación, si se encuentra el elemento, la n.ref
variable no lo será None
. La referencia de new_node
se establece en referencia de n
y la referencia de n
se establece en new_node
. Mira el siguiente guión:
if n.ref is None:
print("item not in the list")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
Agrega una insert_before_item()
función a la LinkedList
clase.
Insertar artículo en índice específico
A veces, necesitamos insertar un elemento en un índice específico, podemos hacerlo con la ayuda del siguiente script:
def insert_at_index (self, index, data):
if index == 1:
new_node = Node(data)
new_node.ref = self.start_node
self.start_node = new_node
i = 1
n = self.start_node
while i < index-1 and n is not None:
n = n.ref
i = i+1
if n is None:
print("Index out of bound")
else:
new_node = Node(data)
new_node.ref = n.ref
n.ref = new_node
En el script, primero verificamos si el índice en el que queremos almacenar el elemento es 1, luego simplemente asignamos start_node
a la referencia de new_node
y luego establecemos el valor de start_node
a new_node
.
A continuación, ejecute un ciclo while que se ejecutará hasta que el contador i
sea mayor o igual que el index-1
. Por ejemplo, si desea agregar un nuevo node al tercer índice. Durante la primera iteración del ciclo while, i
se convertirá en 2 y el node actualmente iterado será ‘2’. El bucle no se ejecutará de nuevo ya i
que ahora es 2, que es igual a index-1 (3-1 = 2). Por lo tanto, el bucle se romperá. A continuación, agregamos un nuevo node después del node actualmente iterado (que es el node 2), por lo tanto, el nuevo node se agrega en el índice.
Es importante mencionar que si el índice o la ubicación pasada como argumento es mayor que el tamaño de la lista vinculada, se le mostrará al usuario un mensaje que indica que el índice está fuera de rango o fuera de límite.
Prueba de funciones de inserción
Ahora que hemos definido todas nuestras funciones de inserción, probémoslas.
Primero, cree un objeto de la clase de lista vinculada de la siguiente manera:
Te puede interesar:Clasificación de texto con Python y Scikit-Learnnew_linked_list = LinkedList()
A continuación, primero llamemos a la insert_at_end()
función para agregar tres elementos a la lista vinculada. Ejecute el siguiente script:
new_linked_list.insert_at_end(5)
new_linked_list.insert_at_end(10)
new_linked_list.insert_at_end(15)
Para ver si los elementos se han insertado realmente, recorramos la lista vinculada usando la función de recorrido.
new_linked_list.traverse_list()
Debería ver el siguiente resultado:
5
10
15
A continuación, agreguemos un elemento al principio:
new_linked_list.insert_at_start(20)
Ahora, si recorre la lista, debería ver el siguiente resultado:
20
5
10
15
Agreguemos un nuevo elemento 17 después del elemento 10:
new_linked_list.insert_after_item(10, 17)
Atravesar la lista devuelve ahora la siguiente salida:
20
5
10
17
15
Puede ver 17 insertados después de 10.
Insertemos ahora otro elemento 25 antes del elemento 17 usando la insert_before_item()
función como se muestra a continuación:
new_linked_list.insert_before_item(17, 25)
Ahora la lista contendrá los siguientes elementos:
20
5
10
25
17
15
Finalmente, agreguemos un elemento en la tercera ubicación, que actualmente está ocupada por 10. Verá que 10 moverá una ubicación hacia adelante y el nuevo elemento se insertará en su lugar. La insert_at_index()
función se puede utilizar para este propósito. El siguiente script inserta el elemento 8
en el índice del tercer índice de la lista.
new_linked_list.insert_at_index(3,8)
Ahora, si recorre la lista, debería ver el siguiente resultado:
20
5
8
10
25
17
15
Y con eso, hemos probado todas nuestras funciones de inserción. Actualmente tenemos 7 elementos en nuestra lista. Escribamos una función que devuelva el número de elementos en una lista vinculada.
Contando elementos
La siguiente función cuenta el número total de elementos.
def get_count(self):
if self.start_node is None:
return 0;
n = self.start_node
count = 0;
while n is not None:
count = count + 1
n = n.ref
return count
En el script anterior creamos una get_count()
función que simplemente cuenta el número de elementos en la lista vinculada. La función simplemente atraviesa todos los nodes de la matriz e incrementa un contador usando el bucle while. Al final del ciclo, el contador contiene el número total de elementos en el ciclo.
Agregue la función anterior a la LinkedList
clase, compile la LinkedList
clase y luego inserte algunos elementos en el LinkedList
como hicimos en la última sección. Teníamos 7 elementos en nuestra lista vinculada, al final de la última sección.
Usemos la get_count()
función para obtener el número total de elementos en la lista:
new_linked_list.get_count()
Debería ver la cantidad de elementos en su lista vinculada en la salida.
Alternativamente, otra forma de obtener el ‘recuento’ de la lista sería rastrear el número de elementos insertados y eliminados de la lista en una simple variable de contador perteneciente a la LinkedList
clase. Esto funciona bien y es más rápido que el get_count
método anterior, si la estructura de datos de la lista subyacente no se puede manipular desde fuera de la clase.
Elementos de búsqueda
La búsqueda de un elemento es bastante similar a contar o recorrer una lista vinculada, todo lo que tiene que hacer es comparar el valor que se buscará con el valor del node durante cada iteración. Si se encuentra el valor, imprima que se encuentra el valor y rompa el ciclo. Si el elemento no se encuentra después de atravesar todos los nodes, simplemente imprima que el elemento no se encuentra.
El guión para el search_item()
es el siguiente:
def search_item(self, x):
if self.start_node is None:
print("List has no elements")
return
n = self.start_node
while n is not None:
if n.item == x:
print("Item found")
return True
n = n.ref
print("item not found")
return False
Agregue la función anterior a la LinkedList
clase. Busquemos un elemento en la lista creada anteriormente. Ejecute el siguiente script:
new_linked_list.search_item(5)
Dado que insertamos 5 en nuestra lista vinculada, la función anterior devolverá verdadero. La salida se verá así:
Item found
True
Crear una lista vinculada
Aunque podemos agregar elementos uno por uno usando cualquiera de las funciones de inserción. Creemos una función que le pida al usuario que ingrese la cantidad de elementos en el node y luego el elemento individual e ingrese ese elemento en la lista vinculada.
def make_new_list(self):
nums = int(input("How many nodes do you want to create: "))
if nums == 0:
return
for i in range(nums):
value = int(input("Enter the value for the node:"))
self.insert_at_end(value)
En el script anterior, la make_new_list()
función primero le pide al usuario el número de elementos de la lista. Luego, usando un bucle for, se le pide al usuario que ingrese el valor para cada node, que luego se inserta en la lista vinculada usando la insert_at_end()
función.
La siguiente captura de pantalla muestra la make_new_list()
función en acción.
Eliminar elementos
En esta sección, veremos las diferentes formas de eliminar un elemento de una única lista vinculada.
Eliminación desde el inicio
Eliminar un elemento o elemento desde el principio de la lista vinculada es sencillo. Tenemos que establecer la referencia del start_node
al segundo node, lo que podemos hacer simplemente asignando el valor de la referencia del node de inicio (que apunta al segundo node) al node de inicio como se muestra a continuación:
def delete_at_start(self):
if self.start_node is None:
print("The list has no element to delete")
return
self.start_node = self.start_node.ref
En el script anterior, primero verificamos si la lista está vacía o no. Si la lista está vacía mostramos el mensaje de que la lista no tiene ningún elemento para eliminar. De lo contrario, asignamos el valor de start_node.ref
al start_node
. El start_node
ahora apuntará hacia el segundo elemento. Agrega la delete_at_start()
función a la LinkedList
clase.
Eliminación al final
Para eliminar un elemento del final de la lista, simplemente tenemos que iterar a través de la lista enlazada hasta el penúltimo elemento, y luego debemos establecer la referencia del penúltimo elemento a ninguno, lo que convertirá el penúltimo elemento a último elemento.
El script de la función delete_at_end
es el siguiente:
def delete_at_end(self):
if self.start_node is None:
print("The list has no element to delete")
return
n = self.start_node
while n.ref.ref is not None:
n = n.ref
n.ref = None
Agregue el script anterior a la LinkedList()
clase.
Eliminación por valor de artículo
Para eliminar el elemento por valor, primero tenemos que encontrar el node que contiene el elemento con el valor especificado y luego eliminar el node. Encontrar el elemento con el valor especificado es bastante similar a buscar el elemento. Una vez que se encuentra el elemento que se va a eliminar, la referencia del node antes del elemento se establece en el node que existe después del elemento que se elimina. Mira el siguiente guión:
def delete_element_by_value(self, x):
if self.start_node is None:
print("The list has no element to delete")
return
# Deleting first node
if self.start_node.item == x:
self.start_node = self.start_node.ref
return
n = self.start_node
while n.ref is not None:
if n.ref.item == x:
break
n = n.ref
if n.ref is None:
print("item not found in the list")
else:
n.ref = n.ref.ref
En el script anterior, primero verificamos si la lista está vacía. A continuación, comprobamos si el elemento a eliminar se encuentra al inicio de la lista enlazada. Si el elemento se encuentra al principio, lo eliminamos estableciendo el primer node en la referencia del primer node (que básicamente se refiere al segundo node).
Finalmente, si el elemento no se encuentra en el primer índice, iteramos a través de la lista vinculada y verificamos si el valor del node que se itera es igual al valor que se eliminará. Si la comparación devuelve verdadera, establecemos la referencia del node anterior al node que existe después del node que se está eliminando.
Prueba de funciones de eliminación
Probemos las funciones de eliminación que acabamos de crear. Pero antes de eso, agregue algunos datos ficticios a nuestra lista vinculada usando el siguiente script:
new_linked_list.insert_at_end(10)
new_linked_list.insert_at_end(20)
new_linked_list.insert_at_end(30)
new_linked_list.insert_at_end(40)
new_linked_list.insert_at_end(50)
El script anterior inserta 5 elementos en una lista vinculada. Si recorre la lista, debería ver los siguientes elementos:
10
20
30
40
50
Primero eliminemos un elemento desde el principio:
new_linked_list.delete_at_start()
Ahora, si recorre la lista, debería ver el siguiente resultado:
20
30
40
50
Eliminemos un elemento del final ahora:
new_linked_list.delete_at_end()
La lista ahora contiene los siguientes elementos:
20
30
40
Finalmente, eliminemos un elemento por valor, digamos 30.
new_linked_list.delete_element_by_value(30)
Ahora, si recorre la lista, no debería ver el elemento 30.
Inversión de una lista vinculada
Para invertir una lista vinculada, debe tener tres variables prev
, n
y next
. El prev
hará un seguimiento del node anterior, el next
hará un seguimiento del siguiente node n
y corresponderá al node actual.
Comenzamos un ciclo while asignando el node inicial a la variable n
y la prev
variable se inicializa a none. El ciclo se ejecuta hasta que se n
convierte en ninguno. Dentro del ciclo while, debe realizar las siguientes funciones.
- Asignar el valor de la referencia del node actual a
next
. - Establezca el valor de referencia del node actual
n
alprev
- Establece la
prev
variable en el node actualn
. - Establezca el node actual
n
en el valor denext
node.
Al final del ciclo, la prev
variable apuntará al último node, necesitamos convertirlo en el primer node, por lo que establecemos la self.start_node
variable de valor en prev
. El bucle while hará que cada node apunte a su node anterior, lo que dará como resultado una lista enlazada invertida. El guión es el siguiente:
def reverse_linkedlist(self):
prev = None
n = self.start_node
while n is not None:
next = n.ref
n.ref = prev
prev = n
n = next
self.start_node = prev
Agregue la función anterior a la LinkedList
clase. Cree una lista vinculada de números aleatorios y luego vea si puede revertirla usando la reverse_linkedlist()
función.
Conclusión
En este artículo, comenzamos nuestra discusión sobre una sola lista vinculada. Vimos cuáles son las diferentes funciones que se pueden realizar en la lista vinculada, como recorrer una lista vinculada, insertar elementos en una lista vinculada, buscar y contar elementos de la lista vinculada, eliminar elementos de una lista vinculada y revertir una sola lista vinculada.
Te puede interesar:Conversión de scripts de Python en archivos ejecutablesEsta es la Parte 1 de la serie de artículos de la lista vinculada. En la siguiente parte (próximamente), veremos cómo ordenar una sola lista vinculada, cómo fusionar listas vinculadas ordenadas y cómo eliminar ciclos de una sola lista vinculada.