面试题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 */

浙公网安备 33010602011771号