解题技巧:
入栈:直接入栈1,
出栈:出栈2的值:若stack2为空则将stack1中的数弹出压入stack2,再弹出stack2中的值;若栈2非空,直接弹出即可。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
int a;
if(stack2.empty())//stack2为空则先将stack1中的数弹出压入stack2
{
while(!stack1.empty())//保证了将stack1中所有的数都压入了stack2
{
a=stack1.top();
stack1.pop();
stack2.push(a);
}
}
//stack2非空,则弹出stack2中的值
a=stack2.top();
stack2.pop();
return a;
}
private:
stack<int> stack1;
stack<int> stack2;
};
相关题目:两个队列实现一个栈
https://www.cnblogs.com/dormant/p/5316954.html
解题技巧:
入栈:(1)若两个队列都为空,则入队列1;(2)队列1为空,入队列2;(3)队列2空,入队列1;
出栈:(1)两个队列都空,返回-1,(2)队列1空,就将队列2中数据存入队列1,在队列2只剩一个数据时输出这个数据;(3)队列2空,就将队列1中数据存入队列2,当队列1只剩一个数据时输出这个数据。
queue<int> q1;
queue<int> q2;
void append(const int &data) { //实现栈的Push功能
if(q1.size() == 0 && q2.size() == 0){ //如果两个队列都空,则将数据push进q1.
q1.push(data);
}
else if(q1.size() > 0){ //如果q1非空则将数据push进q1
q1.push(data);
}
else if(q2.size() > 0){ //如果q2非空则将数据push进q2
q2.push(data);
}
}
int getData(){ //实现从栈中取数据
if(q1.empty() == 1 && q2.empty() == 1){ //如果两个队列都空,则返回-1
return -1;
}
if(q1.empty() == 1){ //如果q1为空,则将q2中的数据存入q1中,当q2只剩一个数据时,则输出这个数据
while(q2.size() != 1){
int &num = q2.front();
q1.push(num);
q2.pop();
}
int s = q2.front();
q2.pop();
return s;
}
if(q2.empty() == 1){ //同理如果q2为空,则将q1中的数据存入q2中,当q2只剩下一个数据时,则输出这个数据
while(q1.size() != 1){
int &num = q1.front();
q2.push(num);
q1.pop();
}
int s = q1.front();
q1.pop();
return s;
}
}