题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。 分析:就是把栈顶元素依次压入到n, n-1,n-2, ..., 2处。 // 递归法颠倒栈 #include <stack> template<typename T> void ReverseStack(std::stack<T>& s) { int count = s.size(); while(count >= 0) { T data = s.top(); s.pop(); // 此处不用s.size作为第三个参数 ReverseStack_Sub(s, data, count-1); --count; } } // 栈顶为第0层,栈底为n-1层,把一个元素写入第floor个 template<typename T> void ReverseStack_Sub(std::stack<T>& s, T data, int floor) { // 如果要把一个元素写入floor层,就相当于栈pop处一个元素, // 然后把当前元素写入到floor-1层,然后再把pop的元素push进来 if(floor > 0) { T temp = s.top(); s.pop(); ReverseStack_Sub(s, data, floor-1); s.push(temp); } else s.push(data); }