【转】 颠倒栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
个人并不觉得这道题设计的有多么好,纯粹就属于没事卖弄技巧的那种,蛋疼的用递归来颠倒一个栈,又浪费时间又浪费空间。
解法的思想其实很简单,那么就是你要我颠倒栈,那么我就先把第一个元素保存了,然后弹出其余所有的元素,然后把第一个元素压进去,然后按原来的顺序,压入被弹出的元素,得到的就是 2 3 4 5 1, 2在栈顶,接着用对于前四个,用同样的方法,最后终于颠倒了。
void reverseStack(stack<T>& s) { int count = stack.size(); while(count >= 0) { T data = s.top(); s.pop(); subReverse(s,data,count-1); count --; } } // 把元素data写入floor层 template <typename T> void subReverse(stack<T>& s, T data, int floor) { if(floor == 0) { T tmp = s.pop(); s.pop(); subReverse(s,data,floor-1); s.push(tmp); } else s.push(data); }