close

DEV Community

Jaspreet singh
Jaspreet singh

Posted on

Implement Stack using Queue (using single queue)

Problem Statement

Implement a Stack using only Queue operations.

Support:

push()
pop()
top()
empty()
Enter fullscreen mode Exit fullscreen mode

Brute Force Intuition

Use two queues.

Push into first queue.

During pop:

Move n-1 elements
Enter fullscreen mode Exit fullscreen mode

to second queue.

Remove last element.

Works but push becomes easy and pop expensive.


Moving Towards the Optimal Approach

Can we use:

Only One Queue ?
Enter fullscreen mode Exit fullscreen mode

Yes.

Whenever a new element arrives:

queue.add(x)
Enter fullscreen mode Exit fullscreen mode

Rotate all older elements behind it.

This makes newest element appear at front.


Pattern Recognition

Stack
+
Queue

=> Rotation Trick
Enter fullscreen mode Exit fullscreen mode

Key Observation

After inserting:

1
2
3
Enter fullscreen mode Exit fullscreen mode

Queue becomes:

3 2 1
Enter fullscreen mode Exit fullscreen mode

Front always behaves like Stack top.


Optimal Java Solution

class MyStack {

    Queue<Integer> mainQ;

    public MyStack() {

        mainQ = new ArrayDeque<>();
    }

    public void push(int x) {

        int size = mainQ.size();

        mainQ.add(x);

        for (int i = 0; i < size; i++) {

            int rem = mainQ.remove();

            mainQ.add(rem);
        }
    }

    public int pop() {

        if (!empty())
            return mainQ.poll();

        return -1;
    }

    public int top() {

        if (!empty())
            return mainQ.peek();

        return -1;
    }

    public boolean empty() {
        return mainQ.isEmpty();
    }
}
Enter fullscreen mode Exit fullscreen mode

Dry Run

push(1)

Queue:
1
Enter fullscreen mode Exit fullscreen mode
push(2)
Enter fullscreen mode Exit fullscreen mode

Queue:

2 1
Enter fullscreen mode Exit fullscreen mode
push(3)
Enter fullscreen mode Exit fullscreen mode

Queue:

3 2 1
Enter fullscreen mode Exit fullscreen mode

Top:

3
Enter fullscreen mode Exit fullscreen mode

Pop:

3 removed
Enter fullscreen mode Exit fullscreen mode

Complexity Analysis

Operation Complexity
Push O(N)
Pop O(1)
Top O(1)

Interview One-Liner

Insert element and rotate the queue so the newest element always stays at the front.

Top comments (0)