问题描述
通过递归函数实现栈元素翻转。例如:stack={1,2,3,4,5} ,将栈中的元素返回之后,变为stack={5,4,3,2,1};
实现方式
利用递归函数的调用栈存储栈中的每一个元素。只要实现先pop的元素,最后push即可。
- 可以利用递归方法的调用栈,获取栈底元素。
- 将stack中的数据,依次从栈底拿出。然后最后push到栈中即可。
//方法声明
//遍历打印栈中元素
void printStack(stack<int>* _stack);
//获取当前栈中,栈底的元素
int getBottomElment(stack<int>* _stack);
//实现当前栈的元素翻转操作
void reverseStack(stack<int>* _stack);
void printStack(stack<int>* _stack){
while (!_stack->empty()) {
cout << _stack->top() << endl;
_stack->pop();
}
}
/**
* 获得栈底部元素
*/
int getBottomElment(stack<int>* _stack){
int result = _stack->top();
_stack->pop();
if(_stack->empty()){
return result;
}
int last = getBottomElment(_stack);
_stack->push(result);
return last;
}
/**
*要想实现栈的翻转,保证后先拿到数据,最后push到栈中
*/
void reverseStack(stack<int>* _stack){
if(_stack->empty()){
return;
}
int last = getBottomElment(_stack);
reverseStack(_stack);
_stack->push(last);
}
运行测试
int main(int argc, const char * argv[]) {
//初始化一个栈
stack<int>* _stack = new stack<int>();
_stack->push(1);
_stack->push(2);
_stack->push(3);
_stack->push(4);
reverseStack(_stack);
printStack(_stack);
return 0;
}