用兩個棧實現乙個佇列。佇列的宣告如下,
尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,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...