首先问题描述:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复习了一下栈的基本知识:先进后出
类似于往杯子里放东西,先放进去的东西会堆在下面,想拿出来需要先移走上面的东西
基本思路:
使用两个栈intStack 和 outStack
假设intStack里面有原始元素(outStack是空栈),那么再push进去intStack里面一个元素value;
例如栈intStack里面有元素[1,2,3];
现在push进去一个value
intStack变成[1,2,3,value];
第二步再把intStack里面的元素从顶部一个一个“倒”进outStack里面
这时自然是value先push进了outStack里面,紧接着push后面的
因此这时outStack里面就变成了[value,3,2,1]
最后删除即pop掉outStack里面的top元素即可删除头部元素
这时队列就变成了[value,3,2]
(以上描述是我看了题解以后自己的白话,可能有所不对的地方,欢迎大家指正批评)
也附一下代码(相当于自己复习一下)
class Queue
{
public:
stack<int>intStack;
stack<int>outStack;
void in2out()
{
while(!intStack.empty())
{
outStack.push(intStack.top());
intStack.pop();
}
}
void appendTail(int value)
{
intStack.push(value);
}
int deleteHead()
{
if(outStack.empty())
{
if(intStack.empty())
{return -1;}
in2out();
}
int result=outStack.top();
outStack.pop();
return result;
}
}