代码随想录第十天 | 232.用栈实现队列, 225. 用队列实现栈
第十天 今天开始学习stack相关
class MyQueue { Stack<Integer> in; Stack<Integer> out; public MyQueue() { in = new Stack<>(); out = new Stack<>(); } public void push(int x) { in.push(x); } public int pop() { if(out.isEmpty()){ while(!in.isEmpty()){ out.push(in.pop()); } } return out.pop(); } public int peek() { if(out.isEmpty()){ while(!in.isEmpty()){ out.push(in.pop()); } } return out.peek(); } public boolean empty() { return in.isEmpty()&&out.isEmpty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */
把一个stack里面的东西都从头都push到第二个stack里,这样顺序就保持先进先出了。
class MyStack { Queue<Integer> q1; Queue<Integer> q2; public MyStack() { q1 = new LinkedList<>(); q2 = new LinkedList<>(); } public void push(int x) { q1.offer(x); } public int pop() { while(q1.size()>1){ q2.offer(q1.poll()); } while(q2.size()>0){ q1.offer(q2.poll()); } return q1.poll(); } public int top() { while(q1.size()>1){ q2.offer(q1.poll()); } int tempValue = q1.peek(); q2.offer(q1.poll()); Queue temp = q1; q1 = q2; q2 = temp; return tempValue; } public boolean empty() { return q1.isEmpty()&&q2.isEmpty(); } }
这道题和上道题不一样的地方是,Q2只是一个帮助排列元素顺序的容器,最终元素还需要返回到Q1。
对帮助理解队列和栈的概念很有帮助
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?