劍指offer刷題總結——堆、棧、隊列篇

1.用兩個棧實現隊列

【題目】

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

【代碼】

package swear2offer.construction;

import java.util.Stack;

public class StackToQueue {

    /**
     * 用兩個棧來實現一個隊列,完成隊列的 Push 和 Pop 操作。 隊列中的元素爲 int 類型。
     *
     * 棧的結構是先進後出,隊列的結構是先進先出
     *  
     * */

    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        stack1.add(node);
    }

    public int pop() {
        if (stack2.empty()) {
            while (!stack1.empty()) {
                stack2.add(stack1.pop());
            }
        }

        return stack2.pop();
    }

}

【思路】

兩個棧stack1和stack2,模擬隊列的能力,插入元素直接插入stack1即可,因爲存儲元素只要保證保存下來,二者的區別關鍵是彈出元素的順序,隊列彈出的元素位於stack的最下面,所以需要把stack1的元素依次彈出,並放入stack2中,這樣彈出元素的時候,只要stack2不爲空,就彈出stack2的元素,stack2爲空的時候,先把stack1的元素壓入stack2,然後繼續彈出stack2.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章