66.颠倒栈
来源:互联网 发布:python alphago 编辑:程序博客网 时间:2024/05/22 02:30
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。
HANDWRITING:
用递归颠倒栈。。折腾。。
void reverse (stack<int> s) {
if (stack.empty()) return ;
int tmp = stack.top();
stack.pop();
reverse(s);
something_magical();
}
不会,只能靠奇迹。。
感觉剑指OFFER给的答案空间时间都不好,像是纯粹绕脑子用的。
剑指OFFER的解答:http://zhedahht.blog.163.com/blog/static/25411174200943182411790/
我们需要考虑的另外一件事情是如何把一个元素e放到一个栈的底部,也就是如何实现AddToStackBottom。这件事情不难,只需要把栈里原有的元素逐一pop出来。当栈为空的时候,push元素e进栈,此时它就位于栈的底部了。然后再把栈里原有的元素按照pop相反的顺序逐一push进栈。
注意到我们在push元素e之前,我们已经把栈里原有的所有元素都pop出来了,我们需要把它们保存起来,以便之后能把他们再push回去。我们当然可以开辟一个数组来做,但这没有必要。由于我们可以用递归来做这件事情,而递归本身就是一个栈结构。我们可以用递归的栈来保存这些元素。
基于如上分析,我们可以写出AddToStackBottom的代码:
// Add an element to the bottom of a stack:template<typename T> void AddToStackBottom(std::stack<T>& stack, T t){ if(stack.empty()) { stack.push(t); } else { T top = stack.top(); stack.pop(); AddToStackBottom(stack, t); stack.push(top); }}
- 66.颠倒栈
- 66.颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 颠倒栈
- 递归颠倒栈
- 递归颠倒栈
- 用递归颠倒栈
- 递归颠倒栈
- 66 颠倒栈
- 算法题30 颠倒栈
- uva 10755 - Garbage Heap(暴力+优化)
- 解决 Iframe跨域session 丢失问题
- 黑马程序员 网络编程1
- 【cocos2d-x】iOS7 设置隐藏状态栏(status bar)
- 贪心区间覆盖--poj2378
- 66.颠倒栈
- STM32 SDIO 报错 SD_RX_OVERRUN
- 2013-ACMICPC Nanjing Online 05 Polygon
- [Android]如何导入已有的外部数据库
- 位操作基础篇之位操作全面总结
- @Override must override a superclass method 问题解决
- 100个最佳linux站点
- 内存字节对齐
- eclipse中配置jdk