算法學習-用兩個棧來實現隊列

題目概述

 

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

 

原題:https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

考察點

棧和隊列

 

時間複雜度

入棧O(1)

出棧O(n)

實現思路

  • 用兩個棧來實現隊列,棧1的話用來入隊,隊列每進入一個元素就入棧1,棧2的話用來出隊,隊列如果要出隊,首先判斷棧2是不是空,是空,就把棧1彈出來進入棧2(因爲棧是先入後出,兩次先入後出就是先入先出了,負負得正嘛~),然後從棧2開始彈,如果棧2不爲空,直接從棧2開始彈

 

Java代碼(可以直接複製使用)

public class QueueBasedOnStack {

    private Stack<Integer> in = new Stack<Integer>();
    private Stack<Integer> out = new Stack<Integer>();

    public void push(int node) {
        in.push(node);
    }

    public int pop() {

        if (out.isEmpty()) {
            //輸出棧爲空 先把數據從輸入棧轉到輸出棧再彈(負負得正)
            while (!in.isEmpty()) {
                out.push(in.pop());
            }
            return out.pop();
        } else {
            //輸出棧不爲空,直接彈
            return out.pop();
        }

    }
}

 

有問題的小夥伴可以在下方留言哦

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