题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数 和在队列头部删除整数 的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例
示例1
1 | 输入: |
示例2
1 | 输入: |
提示:
1 <= values <= 10000- 最多会对
appendTail、deleteHead进行10000次调用
思路

deleteHead函数
当需要删除元素时
- 如果
s2为空,如图1 a、b、c所示,只需要将s1中的所有元素依次出栈,再入栈到s2中,这样s2中,先入栈的在栈顶,,后入栈的在栈顶,只需要直接弹出s2栈顶的元素即可完成队列的头部删除功能。 - 如果
s2不为空,如图1 d、e、c所示,此时队列的实际顺序为从s2栈顶到栈底,再从s1的栈底到栈顶。也就是图中的2,3,4,此时s2栈顶的元素仍然为队列的头部元素,弹出即可完成队列的头部删除功能。
appendTail函数
设s1,s2为两个队列
如果
s2为空,如图1 a所示,添加元素1,2,3只需要在s1中依次入栈,此时队列的顺序为s1栈底到栈顶。如果
s2不为空,如图1 e、f所示,添加元素5同样只需要在s1中依次入栈,此时队列的顺序为从s2栈顶到栈底,再从s1的栈底到栈顶。
综上,对于尾部添加元素,只需要在s1直接入栈。
代码实现
1 | class CQueue |
通过截图
