【設計】C009_LC_用兩個棧實現隊列(數據遷移)

一、Problem

用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )

輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]

提示:

1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次調用

二、Solution

方法一:

思路

第一個棧 st 只管添加數據,第二個棧總得做點什麼,deleteHead 的時候,我們要將 st 中的數據遷移到 helper 中,遷移完畢後,棧頂元素就是「隊頭」元素了

class CQueue {
    Stack<Integer> st, helper;
    public CQueue() {
        st = new Stack<>();
        helper = new Stack<>();
    }
    
    public void appendTail(int v) {
        st.push(v);
    }
    
    public int deleteHead() {
        if (helper.isEmpty()) {
            while (!st.isEmpty())
                helper.push(st.pop());
        }
        return helper.isEmpty() ? -1 : helper.pop();
    }
}
複雜度分析
  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(n)O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章