用栈实现队列(Leetcode232)
package 栈和队列;import java.util.ArrayList;
import java.util.Stack;
思路:1、用一个栈stack2来存压入的数,当要pop或peek操作时再压入stack中,实现队列顺序2、不是每次pop都从stack2中压入数据,要stack中为空,也就是上一次压入的几个数pop完才可以再次压入新数据
public class 用栈实现队列 {public static void main(String[] args) {}//创建2个栈 stack1用来反转顺序辅助static Stack<Integer> stack;static Stack<Integer> stack2;//先存在辅助栈中,比如 1 2 3 4 public void push(int x) {stack2.push(x);}public int pop() {if(stack.isEmpty()){ //要先判断stack是否有未输出完的数字 这里为什么需要stack为空,因为比如现在stack里面的是4321,pop一次后变成432 //这时push一次5 然后在pop 发现是输出5和队列不符 可以自己把判断stack为空的条件去掉验证一下,要将stack里面的数pop完才可以从stack2压新数if(!stack2.isEmpty()) { while(!stack2.isEmpty()) { //将之前的输入存入 这时候就是4321了 stack.push(stack2.pop());}}}return stack.pop(); //pop的就是1了}//和pop一样的道理public int peek() {if(stack.isEmpty()){if(!stack2.isEmpty()) {while(!stack2.isEmpty()) {stack.push(stack2.pop());}}}return stack.peek();}public boolean empty() {if (stack.empty() && stack2.empty()) {return true;} else {return false;}}}