今天牛客这个oj竟然没有出幺蛾子,大概是因为没有输入输出吧。
话不多说,正面刚:栈的性质是先进后出,而队列却是先进先出,所以相当于它们在出的时候是相反的。
下面再说栈的性质,栈的函数只有pop弹出,top访问栈顶元素,push压栈。
下面来看牛客给的头
class Solution
{
public:
void push(int node){
}
int pop() {
}
private:
stack<int> stack1;
stack<int> stack2;
};
pop要求返回元素,第一遍没返回
![敲打](http://static.blog.csdn.net/xheditor/xheditor_emot/default/knock.gif)
如何让出的时候可以第一个进去的出来,很简单,只需要倒置栈就行了,完全反过来,这样访问栈2弹出的第一个元素就是符合要求的元素。
class Solution
{
public:
void push(int node){
stack1.push(node);
while(!stack2.empty()){
stack2.pop();
}
stack<int> stack3(stack1);
while(!stack3.empty()){
stack2.push(stack3.top());
stack3.pop();
}
}
int pop() {
int x=stack2.top();
stack2.pop();
stack<int> stack3(stack2);
while(!stack1.empty()){
stack1.pop();
}
while(!stack3.empty()){
stack1.push(stack3.top());
stack3.pop();
}
return x;
}
private:
stack<int> stack1;
stack<int> stack2;
};
没有输入所以没和牛客斗争。