Algoritmos notables: Invertir una lista enlazada simple con C#
Al dominar este famoso algoritmo, mejoras tu lógica y la romperás en tus entrevistas técnicas 💪🥳

En este artículo de mi serie conocida como Algoritmos notables, te resuelvo este algoritmo que es uno de los más conocidos a nivel mundial y por lo tanto uno de los más solicitados en entrevistas técnicas. Más te vale aprenderlo 🤭 aquí vamos!

Definiciones

Primero, qué es una lista enlazada simple?

Una lista enlazada simple es una estructura de datos lineal en la cual cada elemento, llamado nodo, contiene dos partes principales:

  1. Datos: La información que se almacena en el nodo.
  2. Referencia (puntero o next): Un puntero o referencia al siguiente nodo en la secuencia.

Imagen: bravedeveloper.com

La principal característica de una lista enlazada simple es que cada nodo apunta al siguiente nodo, y el último nodo apunta a null, lo que indica el final de la lista.

Esta estructura de datos está presente en muchos lenguajes de programación, en el caso de C# el tipo utilizado para este fin es LinkedList. Aunque aquí crearemos nuestra propia clase llamada Node.

En este artículo te enseño las estructuras de datos que existen en C# 💪🥳

Algoritmo resuelto en C#

Lo que haremos será un programa en consola que recibe una lista enlazada y la invertirá, finalmente imprimiremos los resultados en pantalla.

class Program
{
    static void Main(string[] args)
    {
        // Crear lista enlazada 1 -> 2 -> 3 -> 4 -> 5
        Node mi_nodo = new Node(1);
        mi_nodo.Next = new Node(2);
        mi_nodo.Next.Next = new Node(3);
        mi_nodo.Next.Next.Next = new Node(4);
        mi_nodo.Next.Next.Next.Next = new Node(5);

        // Invierto la lista enlazada
        mi_nodo = Reverselist(mi_nodo);

        // Imprimir
        while (mi_nodo != null)
        {
            Console.WriteLine(mi_nodo.Data);
            mi_nodo = mi_nodo.Next;
        }
        Console.WriteLine();
    }
    public static Node Reverselist(Node nodo)
    {
        var current = nodo;
        Node prev = null;

        while(current != null)
        {
            var next = current.Next;
            current.Next = prev;
            prev = current;
            current = next;
        }
        return prev;
    }
}

// Clase para almacenar nodos
public class Node
{
    public Node Next;
    public int Data;

    public Node(int data)
    {
        Data = data;
        Next = null;
    }
}

Si ejecutas el programa en la consola obtendrás el resultado correcto

Si esta entrada te ha gustado, compártela a todo el mundo! 🐿️🙌

Créditos de imagen de portada: DALL-E.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *