文章目录
题目
方法一:单个队列实现
- 入栈 和入队正常进行
- 出栈的元素其实就是队列的尾部元素,所以直接将尾部元素弹出即可,其实就可以将除了最后一个元素的其他元素出队再加入队,然后弹出队首元素,就是出栈
- top操作,也是同理需要弹出队尾元素,但是需要将对尾元素再重新加入队列队尾,避免做pop操作产生歧义
java
class MyStack {
Queue<Integer> queue ; //复用队列
public MyStack() {
queue = new LinkedList<>();
}
public void push(int x) {
queue.add(x);
}
public int pop() {//出栈 其实就是将队列最后一个元素弹出去 所以我们可以将除了最后一个元素的其他元素依次弹出再加入队列
queuefz();
return queue.poll();
}
public int top() {
queuefz();
int result = queue.poll();//将队首元素弹出得到栈顶元素
queue.add(result);//再将元素加入队尾,还原状态
return result;
}
public boolean empty() {
return queue.isEmpty();
}
public void queuefz(){//将队列中的栈顶元素放到队首
int size = queue.size();
for(int i = size ; i >1 ; i--){
int out = queue.poll();
queue.add(out);
}
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/