劍指offer 09 用兩個棧實現佇列
阿新 • • 發佈:2020-07-13
用兩個棧實現佇列
力扣官方題解釋出於2020-02-2038.8k官方C#C++GoJava棧方法一:雙棧
思路和演算法
維護兩個棧,第一個棧支援插入操作,第二個棧支援刪除操作。
根據棧先進後出的特性,我們每次往第一個棧裡插入元素後,第一個棧的底部元素是最後插入的元素,第一個棧的頂部元素是下一個待刪除的元素。為了維護佇列先進先出的特性,我們引入第二個棧,用第二個棧維護待刪除的元素,在執行刪除操作的時候我們首先看下第二個棧是否為空。如果為空,我們將第一個棧裡的元素一個個彈出插入到第二個棧裡,這樣第二個棧裡元素的順序就是待刪除的元素的順序,要執行刪除操作的時候我們直接彈出第二個棧的元素返回即可。
成員變數
- 維護兩個棧
stack1
和stack2
,其中stack1
支援插入操作,stack2
支援刪除操作
構造方法
- 初始化
stack1
和stack2
為空
插入元素
插入元素對應方法appendTail
stack1
直接插入元素
刪除元素
刪除元素對應方法deleteHead
- 如果
stack2
為空,則將stack1
裡的所有元素彈出插入到stack2
裡 - 如果
stack2
仍為空,則返回-1
,否則從stack2
彈出一個元素並返回