两个栈实现队列

剑指offer 09 用两个栈实现队列

#记录华科读研转码的岁月

解题分析:栈(一种先进后出的数据结构)、队列(一种先进先出的数据结构)

重点:维护两个栈,一个维护插入,一个维护删除。需要删除的时候可以把插入栈里的元素全部倒进删除栈里,注意只有删除栈为空了,才会倒,否则会破坏元素的顺序。很巧妙。

代码:

  1. class CQueue {
  2. public:
  3. stack<int> stack1; //插入栈
  4. stack<int> stack2; //删除栈
  5. CQueue() {}
  6. void appendTail(int value) {
  7. stack1.push(value);
  8. }
  9. int deleteHead() {
  10. if (stack1.empty()) return -1;
  11. while (!stack1.empty()){ // 1 -> 2
  12. int tmp = stack1.top();
  13. stack1.pop();
  14. stack2.push(tmp);
  15.  }
  16. // delete head
  17. int res = stack2.top();
  18. stack2.pop();
  19. while (!stack2.empty()){ // 1 <- 2
  20. int temp = stack2.top();
  21. stack2.pop();
  22. stack1.push(temp);
  23.   }
  24. return res;
  25. }
  26. };
posted @ 2022-04-25 22:24  ENDEAVOR慷  阅读(40)  评论(0)    收藏  举报