用棧實現隊列(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;}}}