题目描述

用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。

解题思路

队列的特性是先进先出,而栈的特性是先进后出。我们用 Stack1 进行存储,Stack2 进行返回,当 push 操作的时候直接向 Stack1 中存储,当需要 pop 的时候,我们先判断 Stack2 是否为空,不为空的话就直接 pop 出去。
这里注意为什么能直接 pop?因为 Stack2 的值是当 Stack2 为空的时候我们会遍历 Stack1 里面的值将其取出放到 Stack2 中。根据 Stack 特性先进后出,经过两次转换,最初放进 Stack1 里面的值现在在 Stack2 中就是栈顶的值。
借鉴一张图帮助理解
image.png

代码实现

  1. import java.util.Stack;
  2. public class Solution {
  3. Stack<Integer> stack1 = new Stack<Integer>();
  4. Stack<Integer> stack2 = new Stack<Integer>();
  5. public void push(int node) {
  6. stack1.push(node);
  7. }
  8. public int pop() {
  9. if(stack2.size()==0){
  10. while(stack1.size()!=0){
  11. stack2.push(stack1.peek());
  12. stack1.pop();
  13. }
  14. }
  15. int temp=stack2.peek();
  16. stack2.pop();
  17. return temp;
  18. }
  19. }