力扣刷题--栈实现队列
栈实现队列
题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路: 分析
队列的特性是:“先入先出”,栈的特性是:“先入后出”
当我们向模拟的队列插入数 a,b,c 时,假设插入的是 stack1,此时的栈情况为:
- 栈 stack1:{a,b,c}
- 栈 stack2:{}
- 栈 stack1:{}
- 栈 stack2:{c,b}
- 栈 stack1:{}
- 栈 stack2:{c}
- 栈 stack1:{d}
- 栈 stack2:{c}
- 栈 stack1:{d}
- 栈 stack2:{c}
- 当插入时,直接插入 stack1
- 当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素
【力扣刷题--栈实现队列】pop的空间复杂度:O(1)
具体代码实现如下:
import java.util.Stack;
public class Solution {
Stack stack1 = new Stack();
Stack stack2 = new Stack();
public void push(int node) {
while(stack2.size() != 0){
stack1.push(stack2.pop());
}
stack1.push(node);
}
public int pop() {
int node;
if(stack2.size() != 0){
node = stack2.pop();
} else{
while(stack1.size() != 0){
stack2.push(stack1.pop());
}
node = stack2.pop();
}
return node;
}
}
推荐阅读
- leetcode|力扣刷题_栈
- 队列|力扣小白刷题之232题用栈实现队列
- 队列|力扣小白刷题之225题用队列实现栈
- 数据结构与算法基础|[力扣刷题总结](队列和优先队列(堆)篇)
- 【算法】栈
- #yyds干货盘点#面试篇(虚拟机栈5连问,一听心里就乐了)
- 算法 | 第3章 栈与队列相关《程序员面试金典》#yyds干货盘点#
- 0到1快速掌握Java全栈开发,玩转微信生态
- #yyds干货盘点#捌哥图解栈帧,彻底告别面试死记硬背
- spring|阿里内部进阶学习SpringBoot+Vue全栈开发实战文档