1. 程式人生 > 實用技巧 >劍指offer 09 用兩個棧實現佇列

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

用兩個棧實現佇列

力扣官方題解釋出於2020-02-2038.8k官方C#C++GoJava

方法一:雙棧

思路和演算法

維護兩個棧,第一個棧支援插入操作,第二個棧支援刪除操作。

根據棧先進後出的特性,我們每次往第一個棧裡插入元素後,第一個棧的底部元素是最後插入的元素,第一個棧的頂部元素是下一個待刪除的元素。為了維護佇列先進先出的特性,我們引入第二個棧,用第二個棧維護待刪除的元素,在執行刪除操作的時候我們首先看下第二個棧是否為空。如果為空,我們將第一個棧裡的元素一個個彈出插入到第二個棧裡,這樣第二個棧裡元素的順序就是待刪除的元素的順序,要執行刪除操作的時候我們直接彈出第二個棧的元素返回即可。

成員變數

  • 維護兩個棧stack1stack2,其中stack1支援插入操作,stack2支援刪除操作

構造方法

  • 初始化stack1stack2為空

插入元素

插入元素對應方法appendTail

  • stack1直接插入元素

刪除元素

刪除元素對應方法deleteHead

  • 如果stack2為空,則將stack1裡的所有元素彈出插入到stack2
  • 如果stack2仍為空,則返回-1,否則從stack2彈出一個元素並返回