【题目】
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
个人感觉这个题目出的相当操蛋,先不说用这种方式来实现逆序本身就效率极低,这个题目也没有说的足够清楚,比如我就花了很多时间在思考如何仅用一个递归函数来实现这个算法,如果不看答案,很难想得到用2个递归函数,至少在想到的时候也会担心是否会违规,因为本身不用额外的数据结构给人的感觉就是尽量节约开支。
操蛋的代码如下:
#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;
template<class T>
T GetAndRemoveLast(stack<T>& stack) {
T val = stack.top();
stack.pop();
if (stack.empty())
return val;
T last = GetAndRemoveLast(stack);
stack.push(val);
return last;
}
template<class T>
void reverseStack(stack<T>& stack) {
if (stack.empty())
return;
T lastVal = GetAndRemoveLast(stack);
reverseStack(stack);
stack.push(lastVal);
}
int main() {
stack<int> stack;
stack.push(0);
stack.push(1);
stack.push(2);
reverseStack(stack);
int size = stack.size();
for (int i = 0; i < size;++i) {
cout << stack.top() << "\t";
stack.pop();
}
cout << endl;
system("pause");
return 0;
}