66.颠倒栈。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。
题目来源:
微软等公司数据结构+算法面试100 题V0.1 版
http://topic.youkuaiyun.com/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
分析:
当栈不空时,出栈一个元素,将剩下的元素颠倒,再将出栈的元素送入栈底即可。
//子函数InsertStackBottom将数据插入栈底
void InsertStackBottom(stack<int> & nStack, int n)
{
if (nStack.empty())
nStack.push(n);
else
{
int ntop=nStack.top();
nStack.pop();
InsertStackBottom(nStack, n);
nStack.push(ntop);
}
}
//递归颠倒一个栈
void ReverseStack(stack<int> & nStack)
{
if (nStack.empty())
return;
int ntop=nStack.top();
nStack.pop();
ReverseStack(nStack);
InsertStackBottom(nStack, ntop);
}