写在前面:
每日一题真的是难,反正我是搞不定了,开摆。
另外,我最近要军训两周,也不知道能不能坚持每天更新了,
我现在是拿我休息的时间码文了........好累。
题目:剑指 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 push_st; stack 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(); */
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。