笔、面试题积累(1) 颠倒栈
来源:互联网 发布:wp config.php 编辑:程序博客网 时间:2024/05/24 04:31
来自剑指Offer
题目:利用递归颠倒一个栈。输入栈{1,2,3,4,5},1为栈顶, 颠倒之后{5,4,3,2,1},5为栈顶 。
自己设计的方案:
利用一个辅助栈,将输入栈中的元素压入辅助栈中,再依次弹出,则完成了颠倒。
剑指Offer上的解决方案为:利用递归的方法,先将栈顶元素弹出,再将剩下的元素翻转,最后将弹出的栈顶元素放入栈底。
此种方案要想将取出栈顶元素后的栈元素进行翻转,需要分配一组存储空间,但递归即为一种栈操作,所以可以利用递归的栈来保存要被翻转的元素。
template<typename T> void ReverseStack(stack<T>& stack){if(!stack.empty()){T top = stack.top(); //提取出栈顶元素值stack.pop(); //弹出栈顶元素ReverseStack(stack); //递归调用ReverseStackAddToStackBottom(stack,top); //递归返回时调用将每一层的栈顶值放到栈底}}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); //将栈顶元素压入栈底 }}
采用递归套递归的方式。
0 0
- 笔、面试题积累(1) 颠倒栈
- 面试题积累(1)
- 程序员面试题精选-颠倒栈
- 面试题 颠倒整数
- 面试题积累(一)
- 面试题积累(二)
- 面试题积累(三)
- 面试题积累(五)
- 面试题积累(六)
- 面试题积累(七)
- 程序员面试题精选100题(39)-颠倒栈
- 程序员面试题精选100题(39)-颠倒栈
- 程序员面试题精选100题(39)-颠倒栈
- 程序员面试题精选100题(39)-颠倒栈[数据结构]
- 程序员面试题精选100题(39)-递归颠倒栈
- 程序员面试题精选100题(39)-颠倒栈[数据结构]
- 面试题积累(四)-指针与引用(1)
- asp.net面试题(积累)
- spring-data-mongodb 对象关联 @DBRef学习 之疑问
- 获取文件大小的方式
- Linux中10个有用的命令行补齐命令
- Git Stash保存临时修改用法
- css样式大全(整理版)
- 笔、面试题积累(1) 颠倒栈
- Linux编程基础——后台进程、守护进程
- web.xml 文件中关于配置问题
- code in hex file exceeds flash limitations
- Android 中Touch(触屏)事件传递机制
- 百度地图中 真机报错string MD5什么的 可能是....
- iOS 发布应用程序到App Store
- hadoop 学习笔记:mapreduce框架详解
- iOS应用内支付(IAP)的那些坑