LeetCode刷题记录.Day22
用栈实现队列
class MyQueue { public: stack<int> stIn; stack<int> stOut; MyQueue() { } void push(int x) { stIn.push(x); } int pop() { if(stOut.empty()){ while(!stIn.empty()){ stOut.push(stIn.top()); stIn.pop(); } } int result = stOut.top(); stOut.pop();//移除操作 return result; } int peek() { int result = this->pop(); stOut.push(result);//不需要移除,加回去 return result; } bool empty() { return stIn.empty() && stOut.empty(); } }; /** * Your MyQueue object will be instantiated and called as such: * MyQueue* obj = new MyQueue(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->peek(); * bool param_4 = obj->empty(); */
用队列实现栈
class MyStack { public: queue<int> que1; queue<int> que2; MyStack() { } void push(int x) { que1.push(x); } int pop() { int size = que1.size(); size--;//缩小一位保留队尾 while(size--){ que2.push(que1.front()); que1.pop(); }//保留队尾那一个元素 int result = que1.front();//剩下的就是队尾元素 que1.pop(); //移除这个队尾元素 que1 = que2; // 再将que2赋值给que1 while(!que2.empty()){ que2.pop(); }//que2置空 return result; } int top() { return que1.back(); } bool empty() { return que1.empty(); } }; /** * Your MyStack object will be instantiated and called as such: * MyStack* obj = new MyStack(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->top(); * bool param_4 = obj->empty(); */
两道题难度一般,主要在于怎么理解队列(先进先出)和栈(后进先出)之间的关系和互相转换

浙公网安备 33010602011771号