题目:
思路:
其他都很简单,就是pop函数:连续pop,push直接到最后一个元素为止,最后一个元素只pop不push。
代码实现:
submit一次就过了。
class MyStack {
private:
queue<int> my_queue;
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
my_queue.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int count = my_queue.size()-1;
while (count){
int t = my_queue.front();
my_queue.pop();
my_queue.push(t);
--count;
}
int ret = my_queue.front();
my_queue.pop();
return ret;
}
/** Get the top element. */
int top() {
return my_queue.back();
}
/** Returns whether the stack is empty. */
bool empty() {
return my_queue.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();
*/
discuss:
// 思路:把队列尾元素(刚进来的元素)挪到首部(将要弹出的元素)
class MyStack {
public:
queue<int> que;
void push(int x){ // 把入口的元素放到出口位置
que.push(x);
for (int i = 0; i < que.size() - 1; ++i){
que.push(que.front());
que.pop();
}
}
int pop(){
int t = que.front(); // que是从back入,从front出
que.pop();
return t;
}
int top(){
return que.front();
}
bool empty(){
return que.empty();
}
};