题目地址:
225. 用队列实现栈 - 力扣(LeetCode)
难度:简单
今天刷用队列实现栈,大家有兴趣可以点上看看题目要求,试着做一下。
题目:
我们直接看题解吧:
解题方法:
方法1、利用双队列
方法2、利用单队列
审题目+事例+提示:
解题分析:
单队列主要是元素先出队然后在入队,实现前后顺序的调转
双队列主要是把主队元素出队放到辅助对,然后辅助队在入队主队列
解题思路:
单队列:
1、入栈操作时,首先获得入栈前的元素个数 n,然后将元素入队到队列,再将队列中的前 n-1个元素(即除了最后一个后入队的元素之外的全部元素)依次出队并入队到队列尾部,此时队列的前端的元素即为后入队的元素,且队列的前端和后端分别对应栈顶和栈底。
2、出栈操作只需要移除队列的前端元素并返回即可,获得栈顶元素操作只需要获得队列的前端元素并返回即可(不移除元素)。
3、由于队列用于存储栈内的元素,判断栈是否为空时,只需要判断队列是否为空即可。
代码实现:
class MyStack {Queue<Integer> queue; public MyStack() {queue = new LinkedList<Integer>();//创建队列对象 }/** Push element x onto stack. */public void push(int x) {int n = queue.size();queue.offer(x); //for (int i = 0; i < n; i++) { //前n-1元素出队,接着再次入队queue.offer(queue.poll());}}/** Removes the element on top of the stack and returns that element. */public int pop() {return queue.poll(); //出队操作}/** Get the top element. */public int top() {return queue.peek(); //返回栈顶元素}/** Returns whether the stack is empty. */public boolean empty() {return queue.isEmpty(); //判断是否为空}
}