🧩 Invertir una cadena con Pilas — Explicación paso a paso
🎯 Objetivo
Invertir una cadena de texto usando una pila en Java. Ejemplo: "abcd" → "dcba"
🧱 Implementación completa
importjava.util.Stack;publicclass InversorCadena {publicStringalReves(String entrada){if(entrada ==null)thrownewIllegalArgumentException("La cadena no puede ser nula.");Stack<Character> pila =newStack<>();for(char c : entrada.toCharArray()) pila.push(c);StringBuffer invertida =newStringBuffer();while(!pila.isEmpty()) invertida.append(pila.pop());return invertida.toString();}}
🧩 Paso 1 — Validar entrada
if(entrada ==null)thrownewIllegalArgumentException("La cadena no puede ser nula.");
📌 Antes de todo, verificamos si la cadena es null. Si lo es, lanzamos una excepción controlada, evitando errores en tiempo de ejecución (NullPointerException).
🧩 Paso 2 — Crear la pila
Stack<Character> pila =newStack<>();
Creamos una pila vacía que guardará los caracteres de la cadena. Cada push() coloca un carácter encima del anterior.
📊 Ejemplo visual:
Iteración
Carácter
Contenido de la pila
1
'a'
[a]
2
'b'
[a, b]
3
'c'
[a, b, c]
4
'd'
[a, b, c, d]
🧩 Paso 3 — Llenar la pila
for(char c : entrada.toCharArray()) pila.push(c);
🔹 Convertimos la cadena en un arreglo de caracteres con toCharArray(). 🔹 En cada iteración, apilamos el carácter actual (push).
📌 Si la cadena está vacía, funciona sin problema. 📌 Si la cadena es null, el método lanza una IllegalArgumentException.
📊 Visualización del proceso
graph TD
subgraph Proceso
A["Entrada: 'abcd'"] -->|"push"| B["[a, b, c, d]"]
B -->|"pop"| C["Salida: 'dcba'"]
end
style A fill:#edf6f9,stroke:#006d77,stroke-width:2px;
style B fill:#ffddd2,stroke:#e29578,stroke-width:2px;
style C fill:#d0f4de,stroke:#386641,stroke-width:2px;