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

2021-10-07 15:13:01 字數 803 閱讀 8226

劍指 offer 09. 用兩個棧實現佇列

示例 1:

輸入:

[,[3],,]

輸出:[null,null,3,-1]

示例 2:

輸入:

[,,[5],[2],,]

輸出:[null,-1,null,null,5,2]

上大二時候就學的老經典了。

思路:宣告兩個棧s1s2。入佇列操作等同於入棧s1。出佇列操作分三種情況:1.兩個棧都為空,意味著隊列為空,返回 -1。2.s2為空,而s1不為空,此時應該把s1中的元素出棧,並按出棧順序入s2。3.s2不為空,執行出棧操作,等同於出佇列。尋思尋思,是不是這麼個事。

**:

class

cqueue

public

void

(int value)

public

intdeletehead()

return s2.

poll()

;}else

return s2.

poll()

;}}

這裡用的linkdelist,底層實現是個雙向鍊錶,增刪比較省時間。用啥都一樣,無所謂。就是別直接用queue偷雞就行hhhh

劍指offer 09 用兩個棧實現佇列

示例 1 示例 2 這個地方有點繞,需要注意的是 當stack2不為空時,佇列中的元素都在stack2中 stack2中都是待刪除的元素 無論stack1中是否有元素都從2中彈出元素 頻繁的插入和刪除首選linkedlist,通常情況下不推薦使用vector和及其子類stack class cque...

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

該題使用兩個棧,乙個用於存資料,乙個用於取資料,而棧的思路是後進先出,佇列的思路是先進先出,所以需要在插入資料時將所有資料放入a棧,如果此時需要取出資料,那麼就將a內的資料都pop到b中去,假如現在我們插入了 1,2,3 到a中,那麼此時呼叫取資料的函式,將會把資料轉存到b中,b中的資料就為 3,2...

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

劍指 offer 09.用兩個棧實現佇列 分析 佇列為先入先出型,棧為先入後出型。若使用兩個棧,則某一元素先入後出 第乙個棧 再轉移到另乙個棧。此時,棧頂元素即為第乙個進第乙個棧的元素。注意 1 刪除操作中,if s2.empty 不可缺。只有當12345全部delete之後,才可往s2中加元素,不...