Rearch Interest: Visualization">
剑指 Offer 09. 用两个栈实现队列
题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数
appendTail
和 deleteHead
,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead
操作返回 -1
)
示例:
输入:
1
2 >["CQueue","appendTail","deleteHead","deleteHead"]
>[[],[3],[],[]]输出:
[null,null,3,-1]
输入:
1
2 ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]输出:
[null,-1,null,null,5,2]
提示:
1 <= values <= 10000
- 最多会对
appendTail
、deleteHead
进行10000
次调用
我的思路
用两个栈stackA
和stackB
来实现队列的先进先出特性。
思路是:总是从stackA
中出队,即保持stackA
的栈顶总是队首元素。
首先考虑入队。
如果栈stackA
和stackB
都是空的情况下,则将新的值压入栈stackA
;否则压入栈stackB
。
接下来考虑出队。
如果两个栈都为空,则表明已经到达队尾,返回-1
。
如果栈stackA
不为空,则stackA
的栈顶元素应该是当前的队首元素,将其弹出。
在出队操作后,stackA
可能为空。
此时,若stackB
中还有元素,则将其依次弹出并压入栈stackA
中。
由于栈先进后出的特性,被压入stackA
中的元素序列再一次被弹出时,将会符合队列先进先出的顺序。
我的代码
1 | class MyCQueue |