//首先吐槽一下牛客对我这种新手小白也太不又好了吧,栈的函数一个都不给注明一下,只能去猜了
//这题如果对栈和队列他们各自的特性十分熟悉的话还是很简单的,复习一下,栈的最重要特性
//先进后出,队列恰好相反为先进先出,那一起来看下怎么才能用两个栈实现队列呢?
//这里大致讲解一下思路,同学们可以拿出一根笔和纸顺着我的步骤一起画一下
//1.首先题目给了两个栈,这两个栈都有明确的分工,同学们标记一下。第一个栈(stack1)只用来入栈,stack2只用来出栈。就这么简单
//2.对于入栈没有什么情况可以分析,就是入栈我就入第一个(stack1)里面,对于出栈我们要分两种情况
//2.1 第一种情况,如果栈二(stack2)此时为空栈的话,我们首先要把栈1中的元素逐个出栈(出完)再逐个入栈到栈二中去,然后出栈stack2栈顶元素
//2.2 第二种情况,如果栈二不为空,此时我们要出栈的话,直接出栈stack2的栈顶元素即可
//大家可以自行模拟一下,按照这个操作来绝对实现了队列先进先出的特性,绝对童叟无欺
//no 代码你说个JB,下面看代码。
class Solution
{
public:
void push(int node) { //入栈函数,遵照我们前面说的,入栈就一种情况直接入栈stack1中即可
stack1.push(node);//push函数参数就是函数参数类型
}
int pop() { //出栈分两种情况
if(stack2.empty())//第一种情况:栈二为空栈(注意empty函数的返回类型为bool类型,即如果是空栈返回true否则返回false)
{
while(!stack1.empty())//栈二为空栈就把栈一中的元素全部入栈到栈二中
{
int data=stack1.top();
stack1.pop();
stack2.push(data);
}
int data=stack2.top();
stack2.pop();
return data;
}
else//第二种情况:栈二不为空,那就直接出栈顶元素即可
{
int data=stack2.top();
stack2.pop();
return data;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};