import java.util.Stack; class QueueUsingStacks { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Stack<>(); void enqueue(int x) { stack1.push(x); } int dequeue() { if (stack2.isEmpty()) { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } } return stack2.isEmpty() ? -1 : stack2.pop(); } public static void main(String[] args) { QueueUsingStacks queue = new QueueUsingStacks(); queue.enqueue(10); queue.enqueue(20); int first = queue.dequeue(); queue.enqueue(30); int second = queue.dequeue(); int third = queue.dequeue(); System.out.println(first + "," + second + "," + third); } }
The queue inserts 10 and 20 into stack1. On first dequeue, stack2 is empty, so elements move from stack1 to stack2 in reverse order: 20 then 10. The top of stack2 is 10, so 10 is dequeued first.
Then 30 is enqueued into stack1.
Second dequeue pops 20 from stack2.
Third dequeue finds stack2 empty, moves 30 from stack1 to stack2, then pops 30.
Each element is pushed and popped at most twice: once when enqueued and once when moved between stacks. This means the average cost per dequeue is constant time, O(1) amortized.
int dequeue() { if (stack2.isEmpty()) { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } } return stack2.pop(); }
If both stacks are empty, stack2.pop() tries to pop from an empty stack, causing an EmptyStackException.
import java.util.Stack; class QueueUsingStacks { Stack<Integer> s1 = new Stack<>(); Stack<Integer> s2 = new Stack<>(); void enqueue(int x) { s1.push(x); } int dequeue() { if (s2.isEmpty()) { while (!s1.isEmpty()) { s2.push(s1.pop()); } } return s2.isEmpty() ? -1 : s2.pop(); } public static void main(String[] args) { QueueUsingStacks q = new QueueUsingStacks(); q.enqueue(5); q.enqueue(15); System.out.println(q.dequeue()); q.enqueue(25); System.out.println(q.dequeue()); System.out.println(q.dequeue()); System.out.println(q.dequeue()); } }
First dequeue returns 5 (front of queue).
Then 25 is enqueued.
Second dequeue returns 15.
Third dequeue returns 25.
Fourth dequeue returns -1 because queue is empty.
The n elements are distributed between the two stacks, so total space complexity is O(n).
