题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
解题思路
- 题目的目的是让我们用两个“先进后出”的栈stack1和stack2实现一个“先进先出”的队列。
- 首先把元素插入stack1,让stack2为空,这样最开始进去的元素在栈底。
- 当我们试图删除元素时,把stack1中的元素逐个弹出并压入stack2中,让stack1为空。这样stack1和stack2的顺序正好相反,stack2弹出元素时就达到先进先出的目的了。
- 总结,当我们删除一个元素时,首先查看stack2是否为空,若不为空,直接从stack2中弹出元素;若stack2为空,先从stack1把元素逐个弹出并压入stack2,然后再从stack2中弹出元素即可。
代码
class Solution{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
int data;
//若栈2不为空
if(!stack2.empty())
{
data = stack2.top();
stack2.pop();
}
else
{
while(!stack1.empty())
{
data = stack1.top();
stack1.pop();
stack2.push(data);
}
data = stack2.top();
stack2.pop();
}
return data;
}
private:
stack<int> stack1;
stack<int> stack2;
};
网友评论