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

2021-10-12 05:21:33 字數 1732 閱讀 5745

用兩個棧實現乙個佇列。佇列的宣告如下,

尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,deletehead 操作返回 -1 )

leetcode:

示例 1:

輸入:

[,[3],,]

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

示例 2:

輸入:

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

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

題目理解:

輸入:

["cqueue",,

"deletehead"

,"deletehead"

] 這裡是要執行的方法,從左到右執行[[

],[3

],,[

]]對應上面的方法,是上面方法的引數。cqueue和deletehead方法不需要指定數字,只有新增才需要指定數字

1.建立佇列,返回值為null

2.將3壓入棧,返回值為null

3.將棧底的元素刪除,也就是訊息佇列中先進來的元素,所以是deletehead,返回該元素的數值,所以為3

4.繼續刪除棧底的元素,但是沒有元素了,所以返回-

1所以就有了下面的輸出 輸出:[null,null,3,

-1]示例 2: 輸入: [

"cqueue"

,"deletehead",,

,"deletehead"

,"deletehead"][

,[],[5

],[2

],,]

1.建立佇列,返回值為null

2.刪除棧底的元素,但是沒有元素,所以返回-

13.把5壓入棧,返回null

4.把2壓入棧,返回null

5.刪除棧底的乙個元素,也就是訊息佇列中先進來的元素,所以是deletehead,就是最先進來的5,返回值為5,

6.刪除棧底的乙個元素,就是後進來的2,返回值為2,

所以就有了下面的輸出

輸出:[null,-1

,null,null,5,

2]有沒有發現先進來的數字,首先顯示出來了,但是題目中說要使用棧,棧是先進後出的,使用棧來實現先進先出,在這裡使用兩個棧就好了,從乙個進來再到另乙個棧,這樣順序就是先進先出了。題目的主旨寫在第一句,就是,使用兩個棧實現乙個佇列。

// instack棧實現新增節點,outstack刪除佇列頭部節點。

// 需要從 instack 棧進入 outstack 棧,此時元素出棧順序再一次被反轉,因此出棧順序就和最開始入棧順序是相同的,先進入的元素先退出,這就是佇列的順序。

class

cqueue

public

void

(int value)

public

intdeletehead()

}if(outstack.

isempty()

)return-1

;return outstack.

pop();

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

* cqueue obj = new cqueue();

* int param_2 = obj.deletehead();

*/

劍指offer(9) 用兩個棧實現佇列

首先佇列是 先進先出 原則,棧是 先進後出 的原則 接下來設計兩個棧,分為別positive和negative 當最初有元素要入佇列的時候,我們讓其進入positive棧中 如果需要出佇列了,那麼我們可以採取將positive中除了最底層的所有元素依次pop出來放進negative中 然後再將pos...

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

準備兩個棧,稱為a和b,加元素的時候加進a,刪除元素時要考慮情況 假如a中已經有了幾個元素,而b中沒有元素 此時想要刪除元素並且滿足佇列的特性,只需要把a中的元素逐個彈出壓入到bb.push a.pop 直到a為空 此時b中元素的順序和之前的a就是反過來的,此時彈出b的元素即可 如果要刪除資料時,b...

劍指 9 用兩個棧實現佇列

題目描述 演算法分析 stack1只用來插入元素,stack2只用來刪除元素 每次刪除元素時,若stack2為空,則將stack1中所有元素依次壓入stack2中 否則,直接從stack2中刪除站頂元素。提交 class solution int pop result stack2.top stac...