定义两个栈A,B,添加元素时全部加到A中,栈A专门用来第一次添加元素,栈B是为了实现队列删除元素的特点而将元素从A中弹出到B中。 然后当需要删除元素时分三种情况, 1、A不空,B空此时第一次删除,将A中元素全部加入到B中,删除。 2、B不空,直接删除B栈顶元素。 3、A空B空,返回-1
class CQueue { stack<int> stack1,stack2; public: CQueue() { } void appendTail(int value) { stack1.push(value); } int deleteHead() { if(!stack2.empty()){ int value = stack2.top();//top并不删除元素,pop删除元素但返回值为null stack2.pop(); return value; } if(stack1.empty()){return -1;} while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } int value = stack2.top(); stack2.pop(); return value; } }; /** * Your CQueue object will be instantiated and called as such: * CQueue* obj = new CQueue(); * obj->appendTail(value); * int param_2 = obj->deleteHead(); */