🚩传送门:牛客题目

题目

用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。

示例 1:

输入: [“PSH1”,”PSH2”,”POP”,”POP”] 输出: 1,2

解题思路:模拟

队列的特性是:“先入先出”,栈的特性是:“先入后出”
image.png
算法描述:

  1. push 插入时,直接插入 stack1
  2. pop 弹出时
    • stack1stack2 全都为空,说明队列为空,pop 弹出出错
    • stack1stack2 不全为空,说明队列非空
      1. 1. `stack2` 非空,弹出 `stack2` 栈顶元素
      2. 1. `stack2` 为空,弹出 `stack1` 中的全部数并入栈 `stack2`,最后弹出 `stack2` 栈顶元素

我的代码

  1. public class Solution {
  2. Stack<Integer> stack1 = new Stack<Integer>(); //入队
  3. Stack<Integer> stack2 = new Stack<Integer>(); //出队
  4. //1.当 push 插入时,直接插入 stack1
  5. public void push(int node) {
  6. stack1.push(node);
  7. }
  8. //2.当 pop 弹出时
  9. public int pop() {
  10. //若 stack1 和 stack2 不全为空,说明队列非空
  11. if(!stack1.empty()||!stack2.empty()){
  12. //当 stack2 非空,弹出 stack2 栈顶元素
  13. if(!stack2.empty()){
  14. return stack2.pop();
  15. }else{
  16. //当 stack2 为空,弹出 stack1 中的全部数并入栈 stack2
  17. while(!stack1.empty()){
  18. stack2.push(stack1.pop());
  19. }
  20. //最后弹出 stack2 栈顶元素
  21. return stack2.pop();
  22. }
  23. }
  24. //若 stack1 和 stack2 全都为空,说明队列为空,pop 弹出出错
  25. return Integer.MIN_VALUE ;
  26. }
  27. }