Aprender a invertir una cola (Queue) usando solo los métodos:
add()
remove()
isEmpty()
El entrevistador te da una cola con los elementos:
[10, 20, 30]
donde 10 es el frente de la cola.
🎯 Queremos invertirla para obtener:
[30, 20, 10]
Solo puedes usar:
add() para agregar elementos.
remove() para sacar elementos.
isEmpty() para verificar si la cola está vacía.
🚫 Nada de acceder por índice ni usar peek(), size(), etc.
Piensa en cómo se invierte una cadena de texto:
Tomas el primer carácter.
Inviertes el resto.
Lo colocas al final.
💫 Exactamente esa lógica aplicaremos aquí con recursión.
import java.util.*;
public class ReverseQueue {
public static void reverse(Queue<Integer> queue) {
if (queue.isEmpty())
return;
int front = queue.remove();
reverse(queue);
queue.add(front);
}
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(10);
queue.add(20);
queue.add(30);
System.out.println("Cola original: " + queue);
reverse(queue);
System.out.println("Cola invertida: " + queue);
}
}Cola original: [10, 20, 30]
Cola invertida: [30, 20, 10]
| Paso | Acción | Cola actual |
|---|---|---|
| 1️⃣ | remove(10) → llamada recursiva | [20, 30] |
| 2️⃣ | remove(20) → llamada recursiva | [30] |
| 3️⃣ | remove(30) → llamada recursiva | [] |
| 4️⃣ | cola vacía → retorno | [] |
| 5️⃣ | add(30) | [30] |
| 6️⃣ | add(20) | [30, 20] |
| 7️⃣ | add(10) | [30, 20, 10] |
💬 Cada llamada queda “en pausa” hasta que la cola esté vacía, y luego se van apilando las inserciones en orden inverso 🌀
📦 Resultado: "CBA"
📦 Igual ocurre con [10, 20, 30] → [30, 20, 10]
Si el entrevistador no limita las operaciones:
🔁 Misma lógica, pero usando una estructura auxiliar explícita (Stack).
| Estructura | Significado | Orden de procesamiento | Ejemplo cotidiano |
|---|---|---|---|
| 🧺 Queue | First In, First Out | El primero en entrar es el primero en salir. | Fila del banco 🏦 |
| 📚 Stack | Last In, First Out | El último en entrar es el primero en salir. | Pila de platos 🍽️ |
✅ Recursión como estructura auxiliar implícita (pila de llamadas)
✅ Diferencia entre FIFO (Queue) y LIFO (Stack)
✅ Pensamiento algorítmico sin índices ni accesos directos
✅ Resultado: [30, 20, 10]
import java.util.*;
public class ReverseQueue {
public static void reverse(Queue<Integer> queue) {
if (queue.isEmpty())
return;
int front = queue.remove();
reverse(queue);
queue.add(front);
}
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(10);
queue.add(20);
queue.add(30);
System.out.println("Cola original: " + queue);
reverse(queue);
System.out.println("Cola invertida: " + queue);
}
}| Acción | Resultado |
|---|---|
| Original | [10, 20, 30] |
| Invertida | [30, 20, 10] |
✨ ¡Y así se invierte una cola con estilo, lógica y recursión! 💫