目录
写在前面:
题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
写在前面:
每日一题真的是难,反正我是搞不定了,开摆。
另外,我最近要军训两周,也不知道能不能坚持每天更新了,
我现在是拿我休息的时间码文了........好累。
题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(Leetcode)
题目的接口:
class CQueue {
public:
CQueue() {
}
void appendTail(int value) {
}
int deleteHead() {
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/
解题思路:
建两个栈,
一个用来接受队列尾插的值,
一个用来充当队列的头删。
当队列需要进行头删的时候,
将原本接收队列尾插值的那个栈的元素放到另一个栈中,
这样就实现了队列头位于第二个栈的栈顶位置。
之后再进行出栈就是队列的头删了。
代码:
class CQueue {
public:
//建两个栈
stack<int> push_st;
stack<int> del_st;
CQueue() {
}
void appendTail(int value) {
//直接存放值进栈里
push_st.push(value);
}
int deleteHead() {
//如果队列为空,返回-1
if(push_st.empty() && del_st.empty())
{
return -1;
}
int tmp = 0;
//如果用来头删的栈里有数据,就直接pop
if(!del_st.empty())
{
tmp = del_st.top();
del_st.pop();
return tmp;
}
//将所以数据转移到用来删除的栈中
//这个动作还能将队列第一个存放的数据移到栈顶
while(!push_st.empty())
{
tmp = push_st.top();
push_st.pop();
del_st.push(tmp);
}
//然后pop再返回即可
del_st.pop();
return tmp;
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。