用队列实现栈
- 使用队列实现栈的下列操作:
- push(x) – 元素 x 入栈
- pop() – 移除栈顶元素
- top() – 获取栈顶元素
- empty() – 返回栈是否为空
OJ链接:队列实现栈
实现如下:
class MyStack {
private Queue<Integer> qu1;
private Queue<Integer> qu2;
/** Initialize your data structure here. */
public MyStack() {
qu1 = new LinkedList<>();
qu2 = new LinkedList<>();
}
/** Push element x onto stack. */
public void push(int x) {
//1、谁不为空 入到哪个队列就好了
//2、两个都为空 放到第一个qu1当中
if (!qu1.isEmpty()){
qu1.offer(x);
} else if (!qu2.isEmpty()){
qu2.offer(x);
} else {
qu1.offer(x);
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
if (this.empty()){
return -1;
}
int size = qu1.isEmpty() ? qu2.size() : qu1.size();
if (qu1.isEmpty()){
for (int i = 0; i < size-1; i++) {
qu1.offer(qu2.poll());
}
return qu2.poll();
} else {
for (int i = 0; i < size-1; i++) {
qu2.offer(qu1.poll());
}
return qu1.poll();
}
}
/** Get the top element. */
public int top() {
if (this.empty()){
return -1;
}
int tmp = -1;
int size = qu1.isEmpty() ? qu2.size() : qu1.size();
if (qu1.isEmpty()){
for (int i = 0; i < size; i++) {
tmp = qu2.poll();
qu1.offer(tmp);
}
} else {
for (int i = 0; i < size; i++) {
tmp = qu1.poll();
qu2.offer(tmp);
}
}
return tmp;
}
/** Returns whether the stack is empty. */
public boolean empty() {
return qu1.isEmpty() && qu2.isEmpty();
}
}