每天一道算法题(13)——使用递归颠倒栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶
思路:
1.弹出并保存栈顶元素 2.递归,颠倒剩余的栈 3.将栈顶元素保存至栈底
代码:
//使用递归法,逆转栈 template<typename T> bool reverseStack(stack<T> &s){ if(!s.empty()) return false; T temp=s.top(); s.pop(); reverseStack(s); adBottom(s,temp); return true; } //某个元素,使用递归法,添加至栈底。 template<typename T> void adBottom(stack<T> &s,T t){ if(!s.empty()) s.push(t); else{ T temp=s.top(); s.pop(); adBottom(s,t); s.push(t); } }