494. 雙隊列實現(xiàn)棧

描述

利用兩個隊列來實現(xiàn)一個棧的功能

樣例

push(1)
pop()
push(2)
isEmpty() // return false
top() // return 2
pop()
isEmpty() // return true

思路

一個 queue 用來存所有 push 進來的元素庸诱,另一個 queue 用來輔助,在要 top() 或者 pop() 的時候,因為要讀取隊尾的元素,可以將 queue1 中的元素彈出到只剩一個元素,彈出的元素由 queue2 接收,因為 queue 是先進先出才漆,所以 queue2 中的元素順序跟原先 queue1 中的元素順序相同,
這之后 queue1 中剩下的那個元素就是需要的棧頂元素。如果是 top 方法那么只是讀取這個元素褥影,所以彈出之后再 offer 回來就可以了。

代碼

class Stack {
    private Queue<Integer> queue1;
    private Queue<Integer> queue2;
    
    public Stack() {
        queue1 = new LinkedList<Integer>();
        queue2 = new LinkedList<Integer>();
    }
    
    private void moveItems() {
        while (queue1.size() != 1) {
            queue2.offer(queue1.poll());
        }
    }
    // O(1) 的時間操作;
    private void swapQueues() {
        Queue<Integer> temp = queue1;
        queue1 = queue2;
        queue2 = temp;
    }
    
    /**
     * push a new item into the stack
     */
    public void push(int value) {
        queue1.offer(value);
    }
    
    /**
     * return the top of the stack
     */
    public int top() {
        moveItems();
        int item = queue1.poll();
        swapQueues();
        // 把元素重新添加到隊列中去咏雌,保持原樣凡怎,因為 top 不改變棧中的值
        // 實際上就是先把 queue1 中元素移到 queue2 中去,然后交換兩個隊列
        // queue1 變成 queue2赊抖,queue2 變成 queue1
        queue1.offer(item);
        return item;
    }
    
    /**
     * pop the top of the stack and return it
     */
    public void pop() {
        moveItems();
        queue1.poll();
        swapQueues();
    }
    
    /**
     * check the stack is empty or not.
     */
    public boolean isEmpty() {
        return queue1.isEmpty();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末统倒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氛雪,更是在濱河造成了極大的恐慌房匆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件报亩,死亡現(xiàn)場離奇詭異浴鸿,居然都是意外死亡,警方通過查閱死者的電腦和手機弦追,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門岳链,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劲件,你說我怎么就攤上這事掸哑∽蟀” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵举户,是天一觀的道長烤宙。 經常有香客問我,道長俭嘁,這世上最難降的妖魔是什么躺枕? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮供填,結果婚禮上拐云,老公的妹妹穿的比我還像新娘。我一直安慰自己近她,他們只是感情好叉瘩,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粘捎,像睡著了一般薇缅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攒磨,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天泳桦,我揣著相機與錄音,去河邊找鬼娩缰。 笑死灸撰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拼坎。 我是一名探鬼主播浮毯,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泰鸡!你這毒婦竟也來了债蓝?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鸟顺,失蹤者是張志新(化名)和其女友劉穎惦蚊,沒想到半個月后器虾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讯嫂,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年兆沙,在試婚紗的時候發(fā)現(xiàn)自己被綠了欧芽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡葛圃,死狀恐怖千扔,靈堂內的尸體忽然破棺而出憎妙,到底是詐尸還是另有隱情,我是刑警寧澤曲楚,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布厘唾,位于F島的核電站,受9級特大地震影響龙誊,放射性物質發(fā)生泄漏抚垃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一趟大、第九天 我趴在偏房一處隱蔽的房頂上張望鹤树。 院中可真熱鬧,春花似錦逊朽、人聲如沸罕伯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽追他。三九已至,卻和暖如春岛蚤,著一層夾襖步出監(jiān)牢的瞬間湿酸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工灭美, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留推溃,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓届腐,卻偏偏與公主長得像铁坎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犁苏,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 3.10 69.給出一棵二叉樹硬萍,返回其節(jié)點值的層次遍歷(逐層從左往右訪問) 二叉樹的層次遍歷樣例給一棵二叉樹 {3...
    mytac閱讀 1,076評論 3 3
  • 生活大爆炸版石頭剪刀布 題目描述 石頭剪刀布是常見的猜拳游戲:石頭勝剪刀,剪刀勝布围详,布勝石頭朴乖。如果兩個人出拳一樣,...
    bbqub閱讀 451評論 0 0
  • 題目: 正如標題所述助赞,你需要使用兩個棧來實現(xiàn)隊列的一些操作买羞。隊列應支持push(element),pop() 和 ...
    6默默Welsh閱讀 216評論 0 0
  • 題目1: 用數(shù)組結構實現(xiàn)大小固定的棧 思路: 棧:棧是后進先出的雹食,所以定義一個變量size用來記數(shù)組下標畜普,入棧就是...
    一凡呀閱讀 376評論 0 0
  • 數(shù)組索引 這樣聲明個數(shù)組,名為radius群叶,含3個int型元素吃挑。我們可通過radius[0],radius[1],...
    夏威夷的芒果閱讀 913評論 1 0