image.png

思路:

  • 插入的时候,直接把内容插入sta1中即可
  • 弹出的时候,分成两种情况。
    1.如果sta2空了,那么如果sta1同时空了,那么就说明全弹完了,返回-1;否则,就是第一次弹栈,那么需要把sta1的内容全部倒进sta2当中(反了两次就正了)
    2.如果非空,那么就说明不是第一次弹栈,第一次弹栈的时候已经反过一次了,所以正常弹出即可。

代码:

  1. class CQueue {
  2. public:
  3. stack<int> sta1, sta2;
  4. CQueue() {
  5. ;
  6. }
  7. void appendTail(int value) {
  8. sta1.push(value);
  9. }
  10. int deleteHead() {
  11. // 2种情况可能触发:1.第一次执行 2.sta2弹光了
  12. if (sta2.empty()) {
  13. // 如果两个栈都空了
  14. if (sta1.empty()) {
  15. return -1;
  16. }
  17. // 把sta1的内容倒进去
  18. while (!sta1.empty()) {
  19. sta2.push(sta1.top());
  20. sta1.pop();
  21. }
  22. }
  23. int num = sta2.top();
  24. sta2.pop();
  25. return num;
  26. }
  27. };
  28. /**
  29. * Your CQueue object will be instantiated and called as such:
  30. * CQueue* obj = new CQueue();
  31. * obj->appendTail(value);
  32. * int param_2 = obj->deleteHead();
  33. */