面試題09 用兩個棧實現佇列

2021-10-06 21:10:34 字數 776 閱讀 2965

題目

演算法思路

棧的特性是先進後出,佇列是先進先出,題目要求通過兩個棧來實現佇列,說明必有乙個是輔助棧(可以看做佇列),另外乙個棧用於儲存資料。根據棧的特性,第乙個棧底部元素是最先入棧的元素,同時也是第二個棧最先刪除的元素。每次向第乙個棧插入元素時,如果第二個棧不為空,需要先將第二個棧的元素依次出棧然後重新入第乙個棧,然後再將需要入棧的元素value入棧;需要刪除元素時,刪除的是剛剛入第乙個棧的元素,在第乙個棧的棧頭,次時需要將第乙個棧的元素依次刪除如第二個輔助棧,第二個輔助棧的頭元素即為第乙個棧的棧尾,相當於輔助棧是第乙個棧反轉儲存的。然後將輔助棧刪除pop()即實現了先進先出。

**

class

cqueue

public

void

(int value)

stack1.

push

(value);}

public

intdeletehead()

if(!stack2.

isempty()

)return-1

;}}/**

* your cqueue object will be instantiated and called as such:

* cqueue obj = new cqueue();

* int param_2 = obj.deletehead();

*/

LeeCode 面試題09 用兩個棧實現佇列

題目位址class cqueue public void int value 如果兩個棧都是空的,返回 1 如果有元素的話,如果2號棧不空,則彈出2號棧的元素即可 如果2號棧空,最早入棧的元素在1號棧的底部,將1號棧的元素都倒到二號棧,彈出2號棧最上面的元素。public intdeletehead...

面試題 4 用兩個棧實現佇列 用兩個佇列實現棧

首先,我們知道 棧 是先進後出的,佇列 是先進先出的。我們先在 stack1 中插入 a b c d 四個字母。此時,我們如果要做出隊操作的話,a 應該首先被 pop 出來,那麼我們想到,把 stack1 中的所有數 先 pop 出來,那麼 a 就可以出隊了。這時,我們可以利用 stack2 我們將...

劍指Offer 面試題09 用兩個棧實現佇列

示例 1 輸入 3 輸出 null,null,3,1 示例 2 輸入 5 2 輸出 null,1,null,null,5,2 解題思路 棧無法實現佇列功能 棧底元素 對應隊首元素 無法直接刪除,需要將上方所有元素出棧。雙棧可實現列表倒序 設有含三個元素的棧 a 1,2,3 和空棧 b 若迴圈執行 a...