LeetCode225.用队列实现栈
题目描述#
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
示例#
提交的代码#
方法一:#
import java.util.Deque;
import java.util.LinkedList;
class MyStack {
Deque<Integer> inQueue;
Deque<Integer> outQueue;
public MyStack() {
inQueue=new LinkedList<>();
outQueue=new LinkedList<>();
}
public void push(int x) {
inQueue.offerLast(x);
}
public int pop() {
dumpQueue();
return outQueue.pollFirst();
}
public int top() {
dumpQueue();
return outQueue.peekFirst();
}
public boolean empty() {
return inQueue.isEmpty()&&outQueue.isEmpty();
}
public void dumpQueue(){
if(inQueue.isEmpty())return;
while(!inQueue.isEmpty()){
outQueue.offerFirst(inQueue.pollFirst());
}
}
}
实现的思想和上一篇实现栈的思想类似。只不过dumpQueue方法和dumpStack方法中判断空的逻辑变了一些。
方法二#
import java.util.Queue;
import java.util.LinkedList;
class MyStack {
Queue<Integer> mainQueue;
Queue<Integer> auxQueue;
public MyStack() {
mainQueue=new LinkedList<>();
auxQueue=new LinkedList<>();
}
public void push(int x) {
while(!mainQueue.isEmpty()){
auxQueue.offer(mainQueue.poll());
}
mainQueue.offer(x);
while(!auxQueue.isEmpty()){
mainQueue.offer(auxQueue.poll());
}
}
public int pop() {
return mainQueue.poll();
}
public int top() {
return mainQueue.peek();
}
public boolean empty() {
return mainQueue.isEmpty();
}
}
实现的思想就是主队列来模拟栈(倒着的),当offer元素时,先将主队列的元素出队依次添加到辅助队列的末尾,保持次序不变,然后将新添加的元素添加到主队列的尾部(此时队列为空,也是头部),然后再将辅助队列依次出队并加入主队列的后面。
学习到的东西#
本来还想找一下jdk官方对于Queue实现的,但是发现有个Deque(Double end queue)这个类既可以做栈又可以做队列,和Queue的操作类似,不过加了个first和last而已(offerFirst,offerLast,pollFirst,pollLast,peekFirst,peekLast)。
作者:whitePuPigeon
出处:https://www.cnblogs.com/whitePuPigeon/p/17798963.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现