題目描述
用兩個(gè)棧來(lái)實(shí)現(xiàn)一個(gè)隊(duì)列仔沿,完成隊(duì)列的Push和Pop操作坐桩。 隊(duì)列中的元素為int類型。
思路:棧的特點(diǎn)是先進(jìn)后出封锉,隊(duì)列的特點(diǎn)是先進(jìn)先出绵跷。要想讓入棧的順序變成隊(duì)列的先進(jìn)先出,可以先將數(shù)據(jù)push進(jìn)一個(gè)棧成福,都push完了之后就出棧碾局,用另一個(gè)棧來(lái)接收,再出棧奴艾。順序即可變成先進(jìn)先出净当。
解法:
import java.util.Stack;
public class Solution {
? ? Stack<Integer> stack1 = new Stack<Integer>();
? ??Stack<Integer> stack2 = new Stack<Integer>();
????public void push(int node) {
? ? ? ? stack1.push(node);? ? 進(jìn)隊(duì)的時(shí)候直接采用一個(gè)棧來(lái)實(shí)現(xiàn),調(diào)用push方法蕴潦。
? ? }
????public int pop(){
? ? ? ? ?//出棧的時(shí)候先判斷兩個(gè)棧是否都是空像啼,如果都是空,拋出異常潭苞。
? ? ? ? ?//接下來(lái)直接判斷棧2是否為空忽冻,滿足該條件下寫(xiě)一個(gè)while循環(huán),循環(huán)條件是stack1不為空
? ? ? ? //stack2進(jìn)棧
? ? ? ? //最后要輸出序列此疹,直接return stack2.pop
? ? ? ? if(stack1.empty()? ? &&? ?stack2.empty()){
? ? ? ? ? ? throw new RuntimeException("Queue is empty!");
? ? ? ? }
? ? ? ? if(stack2.empty()){
? ? ? ? ? ? while(!stack1.empty()){
? ? ? ? ? ? ? ? stack2.push(stack1.pop());
? ? ? ? ? ? }
? ? ? ? }
? ? return stack2.pop();
? ? }
}