面试题09. 用两个栈实现队列

题目:

 

 

解答:

只使用一个栈 stack1 当作队列,另一个栈 stack2 用来辅助操作。 要想将新加入的元素出现栈底,需要先将 stack1 的元素转移到 stack2,将元素入栈 stack1,最后将 stack2 的元素全部回到 stack1。

 1 class CQueue {
 2 public:
 3     CQueue() {
 4 
 5     }
 6     
 7     void appendTail(int value) 
 8     {
 9         stack1.push(value);
10     }
11     
12     int deleteHead() 
13     {
14         if (stack1.empty())
15         {
16             return -1;
17         }
18 
19         while (!stack1.empty())
20         {
21             int tmp = stack1.top();
22             stack1.pop();
23             stack2.push(tmp);
24         }
25 
26         // delete head
27         int res = stack2.top();
28         stack2.pop();
29         while (!stack2.empty())
30         {
31             int tmp = stack2.top();
32             stack2.pop();
33             stack1.push(tmp);
34         }
35 
36         return res;
37     }
38 private:
39     std::stack<int> stack1;
40     std::stack<int> stack2;
41 };
42 
43 /**
44  * Your CQueue object will be instantiated and called as such:
45  * CQueue* obj = new CQueue();
46  * obj->appendTail(value);
47  * int param_2 = obj->deleteHead();
48  */

 

posted @ 2020-05-09 12:58  梦醒潇湘  阅读(91)  评论(0)    收藏  举报