Reverse Linked List: Invirtiendo una lista enlazada paso a paso
Se explica cómo invertir una lista enlazada en C# utilizando Linked List.
Reverse Linked List, entendiendo el problema
Invertir una lista enlazada es uno de los ejercicios más importantes para dominar estructuras dinámicas. En este artículo explicaremos cómo hacerlo de forma iterativa con C#.
¿Qué se nos pide?
Se nos da la cabeza de un Linked List (head) y debemos invertir la dirección de todos los nodos, de forma que el último nodo se convierta en el nuevo inicio.
Ejemplo:
- Input:
1 -> 2 -> 3 -> 4 -> 5 - Output:
5 -> 4 -> 3 -> 2 -> 1
Esto significa que debemos cambiar los punteros .next de cada nodo para que apunten hacia el anterior.
Lógica detrás del algoritmo
Utilizaremos tres Linked List:
-
curr: el nodo actual que estamos procesando.
-
prev: el nodo anterior (inicia en null).
-
next: para guardar el próximo nodo y no perder la conexión.
La idea es ir moviendo cada nodo y redirigir su .next hacia el nodo anterior.
Código inicial en C#:
public class Solution {
public ListNode ReverseList(ListNode head) {
}
}
Primer paso:
Creamos tres Linked List:
curr comienza desde head.
prev es null porque al final el último nodo apuntará a null.
next se usará dentro del bucle para guardar el siguiente nodo.
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode curr = head;
ListNode prev = null;
ListNode next = null;
}
}
Segundo paso:
Creamos un while que se ejecuta mientras curr no sea null. Dentro del bucle, hacemos lo siguiente en orden:
-
Guardamos el siguiente nodo en next.
-
Cambiamos curr.next para que apunte al nodo anterior (prev).
-
Avanzamos prev al nodo actual.
-
Avanzamos curr al siguiente nodo (next).
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode curr = head;
ListNode prev = null;
ListNode next = null;
while( curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
¿Por qué return prev?
Cuando el bucle termina, curr ya es null, y prev está en el último nodo procesado, que ahora es la nueva cabeza de la lista invertida.
Conclusión
Este problema es una excelente forma de entender cómo manipular estructuras dinámicas con Linked List. Al realizar este problema tendras mas idea de como es que funciona todo lo relacionado a Linked List.
Subscribete al Newsletter
Obten las notificaciones directamente a tu inbox cuando se agregue un leetcode nuevo.
No spam, ever. Unsubscribe anytime. Your email will never be shared.
Related Posts

Fizz Buzz: Explicación simple del clásico de LeetCode
Se explica Fizz Buzz de una manera sencilla en C# para que los principiantes entiendan cómo resolverlo paso a paso.
Is Subsequence: Verificando subsecuencias paso a paso
Explicamos cómo determinar si una cadena es subsecuencia de otra en C# con un algoritmo eficiente.

Maximum Depth of Binary Tree: Explorando la profundidad máxima en C#
Descubre cómo calcular la profundidad máxima de un binary tree utilizando recursión en C#.