两个栈实现链表

剑指 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 }

 

 

posted @ 2022-02-24 00:32  跳动的休止符  阅读(60)  评论(0)    收藏  举报