实现一个栈的逆序,但是只能用递归函数和这个栈本身的pop操作来实现,而不能自己申请另外的数据结构。
给定一个整数数组A即为给定的栈,同时给定它的大小n,请返回逆序后的栈。
测试样例:
[4,3,2,1],4
返回:[1,2,3,4]
class StackReverse {
public:
vector<int> reverseStack(vector<int> A, int n) {
// write code here
for (int i = 0; i < n; i++){
stack_data.push(A[i]);
}
reverse(stack_data);
A.resize(0);
while (!stack_data.empty())
A.push_back(getStackBottom(stack_data));
return A;
}
void reverse(stack<int> &t_stack_data){
if (t_stack_data.empty())
return;
int bot = getStackBottom(t_stack_data);
reverse(t_stack_data);
t_stack_data.push(bot);
}
int getStackBottom(stack<int> &t_stack_data){
int result = pop();
if (stack_data.empty())
return result;
int last_result = getStackBottom(t_stack_data);
t_stack_data.push(result);
return last_result;
}
int pop(){
if (!stack_data.empty()){
int result = stack_data.top();
stack_data.pop();
}
else{
return NULL;
}
}
stack<int> stack_data;
};