package com.github.miniyk2012.coding2017.basic.stack;
import java.util.LinkedList;
import java.util.Queue;
public class StackWithTwoQueues<E> {
private Queue<E> queue1 = new LinkedList<>();
private Queue<E> queue2 = new LinkedList<>();
public boolean isEmpty() {
return queue1.isEmpty() && queue2.isEmpty();
}
public void push(E data) {
if (queue1.isEmpty()) {
queue1.add(data);
move(queue2, queue1);
} else {
queue2.add(data);
move(queue1, queue2);
}
}
public E pop() {
if (!queue1.isEmpty()) {
return queue1.remove();
} else {
return queue2.remove();
}
}
public E peek() {
if (!queue1.isEmpty()) {
return queue1.peek();
} else {
return queue2.peek();
}
}
public int size() {
return queue1.size() + queue2.size();
}
private void move(Queue q1, Queue q2) {
while(!q1.isEmpty()) {
q2.add(q1.remove());
}
}
}