劍指Offer-5.用兩個棧實現隊列(C++/Java)

題目:

用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。java

分析:

棧的特色是先進後出,隊列的特色則是先進先出。node

題目要求咱們用兩個棧來實現一個隊列,棧和隊列都有入棧(入隊)的操做,因此咱們能夠使用一個棧來模擬入隊的操做,另外一個棧用來負責出隊。spa

利用stack1模擬入隊操做,stack2模擬出隊操做。code

當有元素入隊時,就直接壓入stack1中,當要出出隊時,stack1中元素彈出的順序和要求出隊的順序是正好相反的,咱們能夠將stack1的元素依次彈出,再壓入stack2中,此時stack2中元素彈出的順序,正好與要求出隊的順序是一致的。固然每次出隊的時候都要判斷stack2是否爲空,爲空的話就將stack1中元素彈出再壓入stack2中,再彈出stack2中的棧頂元素,若是不爲空,直接彈出棧頂元素便可。blog

程序:

C++隊列

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        int res;
        if(!stack2.empty()){
            res = stack2.top();
            stack2.pop();
            return res;
        }
        else{
            while(!stack1.empty()){
                stack2.push(stack1.top());
                stack1.pop();
            }
            res = stack2.top();
            stack2.pop();
            return res;
        }
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

Javaio

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() {
        int res;
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.peek());
                stack1.pop();
            }
        }
        res = stack2.peek();
        stack2.pop();
        return res;
    }
}
相關文章
相關標籤/搜索