@@ -72,6 +72,7 @@ class MyStack {
7272public:
7373 queue<int > que1;
7474 queue<int > que2; // 辅助队列,用来备份
75+
7576 /** Initialize your data structure here. */
7677 MyStack() {
7778
@@ -100,9 +101,28 @@ public:
100101 return result;
101102 }
102103
103- /** Get the top element. */
104- int top() {
105- return que1.back();
104+ /** Get the top element.
105+ ** Can not use back() direactly.
106+ */
107+ int top(){
108+ int size = que1.size();
109+ size--;
110+ while (size--){
111+ // 将que1 导入que2,但要留下最后一个元素
112+ que2.push(que1.front());
113+ que1.pop();
114+ }
115+
116+ int result = que1.front(); // 留下的最后一个元素就是要回返的值
117+ que2.push(que1.front()); // 获取值后将最后一个元素也加入que2中,保持原本的结构不变
118+ que1.pop();
119+
120+ que1 = que2; // 再将que2赋值给que1
121+ while (!que2.empty()){
122+ // 清空que2
123+ que2.pop();
124+ }
125+ return result;
106126 }
107127
108128 /** Returns whether the stack is empty. */
@@ -126,14 +146,17 @@ C++优化代码
126146class MyStack {
127147public:
128148 queue<int> que;
149+
129150 /** Initialize your data structure here. */
130151 MyStack() {
131152
132153 }
154+
133155 /** Push element x onto stack. */
134156 void push(int x) {
135157 que.push(x);
136158 }
159+
137160 /** Removes the element on top of the stack and returns that element. */
138161 int pop() {
139162 int size = que.size();
@@ -147,9 +170,21 @@ public:
147170 return result;
148171 }
149172
150- /** Get the top element. */
151- int top() {
152- return que.back();
173+ /** Get the top element.
174+ ** Can not use back() direactly.
175+ */
176+ int top(){
177+ int size = que.size();
178+ size--;
179+ while (size--){
180+ // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
181+ que.push(que.front());
182+ que.pop();
183+ }
184+ int result = que.front(); // 此时获得的元素就是栈顶的元素了
185+ que.push(que.front()); // 将获取完的元素也重新添加到队列尾部,保证数据结构没有变化
186+ que.pop();
187+ return result;
153188 }
154189
155190 /** Returns whether the stack is empty. */
0 commit comments