队列实现栈
题目要求:
提交结果:
问题分析
举例说明; 1 2 3 4 5 入队列A
将A队列的内容弹出,给A队列中仅留一个数据,将弹出的数据 入队列B。
即A中剩5,B中为1,2,3,4。
将5 出队,就是第一次pop的结果。
然后再将B队列中的 1 2 3 入队列A 从B队列中弹出4,第二次pop的结果
就这样来回倒即可。
其实实际写代码的时候,不必来回倒,只需要将两个队列的引用交换一下即可。
代码实现
- 两个队列
Queue<Integer> dataQueue;
Queue<Integer> helpQueue;
/** Initialize your data structure here. */
public MyStack() {
dataQueue = new LinkedList<>();
helpQueue = new LinkedList<>();
}
- push方法
public void push(int x) {
dataQueue.offer(x);
}
- top方法
public int top() {
while(dataQueue.size() > 1){
helpQueue.offer(dataQueue.poll());
}
int res = dataQueue.poll();
helpQueue.offer(res);
swap();
return res;
}
- pop方法
public int pop(){
while(dataQueue.size() > 1){
helpQueue.offer(dataQueue.poll());
}
int res = dataQueue.poll();
swap();
return res;
}
- isEmpty方法
public boolean empty() {
return dataQueue.isEmpty() && helpQueue.isEmpty();
}
- swap方法交换引用
private void swap(){
// 交换一下引用
Queue<Integer> temp = dataQueue;
dataQueue = helpQueue;
helpQueue = temp;
}