225. 用队列实现栈


?做题思路 or 感想 :

  • 用队列实现栈,仅仅用一个队列就可以了

    • push:直接push进队列就好

    • pop:把队首加到队尾,直到最开始的队尾变成了队首,这样就可以取最开始的队尾的值了。

    • peek:这个和pop的操作差不多,但是最后的操作有别。在最后取完队首(即是最开始的栈顶)后,要再把队首加到队尾去,还原成一开始的队列!不然最开始的队首就变成了栈顶了!

      class MyStack {
      public:
          MyStack() {
      
          }
          queueque;
          void push(int x) {
              que.push(x);
          }
          
          int pop() {
              int size = que.size() - 1;
              while (size--) {
                  int front = que.front();
                  que.pop();
                  que.push(front);
              }
              int result = que.front();
              que.pop();
              return result;
          }
          
          int top() {
              int size = que.size() - 1;
              while (size--) {
                  int front = que.front();
                  que.pop();
                  que.push(front);
              }
              int result = que.front();	//这里记得把队列还原回一开始的队列!!!
              que.push(result);
              que.pop();
              return result;
          }
          
          bool empty() {
              return que.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();
       */