package me.lzb.basic.stack;
import java.util.LinkedList;
public class StackWithTwoQueues {
private java.util.Queue<Integer> queue1;
private java.util.Queue<Integer> queue2;
private boolean isOne;
public StackWithTwoQueues() {
queue1 = new LinkedList();
queue2 = new LinkedList();
isOne = true;
}
public boolean isEmpty() {
return queue1.isEmpty() && queue2.isEmpty();
}
public int size() {
return queue1.isEmpty() ? queue2.size() : queue1.size();
}
public void push(int data) {
if (isOne) {
queue1.add(data);
} else {
queue2.add(data);
}
}
public int pop() {
if (isEmpty()) {
throw new RuntimeException(" Stack is empty now");
}
int r;
if (isOne) {
while (queue1.size() > 1) {
queue2.add(queue1.poll());
}
r = queue1.poll();
isOne = false;
} else {
while (queue2.size() > 1) {
queue1.add(queue2.poll());
}
r = queue2.poll();
isOne = true;
}
return r;
}
@Override
public String toString() {
if (isEmpty()) {
return "[]";
}
StringBuffer sb = new StringBuffer();
sb.append("[");
int a = 1;
if (isOne) {
for (int i : queue1) {
sb.append(i);
if (a < queue1.size()) {
sb.append(",");
}
a++;
}
} else {
for (int i : queue2) {
sb.append(i);
if (a < queue2.size()) {
sb.append(",");
}
a++;
}
}
sb.append("]");
return sb.toString();
}
}