两个栈实现链表
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数
appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1:
输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1]
示例 2:
输入: ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"] [[],[],[5],[2],[],[]] 输出:[null,-1,null,null,5,2]
提示:
1 <= values <= 10000最多会对 appendTail、deleteHead 进行 10000 次调用
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 class CQueue { 6 public: 7 CQueue() { 8 9 } 10 11 void appendTail(int value) { 12 s1.push(value); 13 return; 14 } 15 16 int deleteHead() { 17 if (s2.empty()) { 18 while (!s1.empty()) { 19 s2.push(s1.top()); 20 s1.pop(); 21 } 22 } 23 if (s2.empty()) { 24 return -1; 25 } else { 26 int tmp = s2.top(); 27 s2.pop(); 28 return tmp; 29 } 30 } 31 public: 32 stack<int> s1; 33 stack<int> s2; 34 }; 35 36 int main() 37 { 38 CQueue *test = new CQueue(); 39 test->appendTail(2); 40 test->appendTail(3); 41 test->appendTail(4); 42 std::cout << test->deleteHead() << endl; // 2 43 std::cout << test->deleteHead() << endl; // 3 44 std::cout << test->deleteHead() << endl; // 4 45 std::cout << test->deleteHead() << endl; // -1 46 test->appendTail(4); 47 test->appendTail(5); 48 test->appendTail(6); 49 std::cout << test->deleteHead() << endl; // 4 50 test->appendTail(7); 51 std::cout << test->deleteHead() << endl; // 5 52 53 delete test; 54 system("pause"); 55 return 0; 56 }
浙公网安备 33010602011771号