題目
演算法思路
棧的特性是先進後出,佇列是先進先出,題目要求通過兩個棧來實現佇列,說明必有乙個是輔助棧(可以看做佇列),另外乙個棧用於儲存資料。根據棧的特性,第乙個棧底部元素是最先入棧的元素,同時也是第二個棧最先刪除的元素。每次向第乙個棧插入元素時,如果第二個棧不為空,需要先將第二個棧的元素依次出棧然後重新入第乙個棧,然後再將需要入棧的元素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...