package com.coding.basic.datastructure.stack;
import java.util.ArrayDeque;
import java.util.Queue;
public class StackWithTwoQueues<E> {
private Queue<E> firstQueue;
private Queue<E> secondQueue;
public StackWithTwoQueues() {
firstQueue = new ArrayDeque<>();
secondQueue = new ArrayDeque<>();
}
public void push(E data) {
if (firstQueue.isEmpty() && secondQueue.isEmpty()) {
firstQueue.add(data);
return;
}
if (!firstQueue.isEmpty()) {
firstQueue.add(data);
return;
}
if (!secondQueue.isEmpty()) {
secondQueue.add(data);
return;
}
}
public E pop() {
E data = null;
if (!firstQueue.isEmpty()) {
data = this.pop(firstQueue, secondQueue);
} else if (!secondQueue.isEmpty()) {
data = this.pop(secondQueue, firstQueue);
}
return data;
}
private E pop(Queue<E> fromQueue, Queue<E> toQueue) {
E data = null;
while (fromQueue.size() > 0) {
if (fromQueue.size() == 1) {
data = fromQueue.poll();
} else {
toQueue.add(fromQueue.poll());
}
}
return data;
}
}