1、思路
递归地每次取得栈底元素,当达到最后一层递归时取得的就是栈顶元素了,再利用递归返回,将栈顶元素
push
入栈底即可。
2、实现
需要构造两个递归函数来实现栈的逆序:
getAndRemoveLastElement()
方法能够递归把栈弹出,取得并移除栈底元素后,再恢复栈;reverse()
方法用来递归取得栈底元素,
3、代码
#include <iostream> #include <stack> using namespace std; int getAndRemoveLastElement(stack<int>& stk) //移除并返回栈底元素 { int num = stk.top(); //先取得当前栈顶元素 stk.pop(); if (stk.empty()) //栈空说明已经到栈底了,直接返回当前栈底元素 { return num; } else //还没到栈底,继续往下走 { int last = getAndRemoveLastElement(stk); stk.push(num); return last; //last就是栈底元素,一层一层传上来,作为最后的返回值 } } void reverse(stack<int>& stk) { if (stk.empty()) return ; int i = getAndRemoveLastElement(stk); //取得栈底元素 reverse(stk); //最后一层递归时取得栈顶元素 stk.push(i); //将栈顶元素push入栈底 } int main() { stack<int> stk; int n; cin >> n; while (n -- ) //输入栈元素 { int num; cin >> num; stk.push(num); } reverse(stk); while (!stk.empty()) //输出栈元素 { cout << stk.top() << " "; stk.pop(); } return 0; }