1. 程式人生 > >《劍指Offer》棧和佇列--用兩個棧實現佇列

《劍指Offer》棧和佇列--用兩個棧實現佇列

時間限制:1秒 空間限制:32768K 熱度指數:317529

本題知識點: 佇列 

題目描述

用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。

思路:

首先需要清楚的是,棧的特點是:先進後出;佇列的特點是:先進先出

舉個例子,不失一般性,PUSH1,PUSH2,PUSH3,POP,POP,PUSH4,POP,PUSH5,POP,POP,該例子佇列輸出的結果是12345

在此之前,我們要清楚,兩個棧如何實現佇列的push和pop操作,push操作與棧的push相同,直接進行即可,二pop操作,首先讓push進棧1,然後棧2壓入棧1的彈出,然後棧2彈出即為佇列的pop,這裡注意的是,因為在進行彈出後還會進行佇列的繼續push操作,因此,在最後要對棧1進行壓入棧2的彈出,若沒有這步操作,以上例子的輸出結果將變為12453

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);
    }
    
    public int pop() {
        while(!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        int popNode = stack2.pop();
        while(!stack2.isEmpty()){
            stack1.push(stack2.pop());
        }
        return popNode;
    }
}