检测链表环路引发的思考
2016-03-07 11:32
323 查看
一个小小的数学游戏引发的奇妙思路之旅!
如题:请在O(n)时间复杂度内找出链表(存在环路)中环路的起点。
解答:设定双(快慢)指针,慢指针每次向后移动一个元素,快指针每次向后移动两个元素。两指针依次向后遍历,直到相遇。相遇时,将慢指针指向头节点,将快指针设置为慢指针,继续向后遍历,直到相遇。相遇节点即为环路的起始节点。
思考:实际上,巧妙地运用了速度为两倍的追赶相遇问题:他们会在前者的对称位置相遇。
如题:请在O(n)时间复杂度内找出链表(存在环路)中环路的起点。
解答:设定双(快慢)指针,慢指针每次向后移动一个元素,快指针每次向后移动两个元素。两指针依次向后遍历,直到相遇。相遇时,将慢指针指向头节点,将快指针设置为慢指针,继续向后遍历,直到相遇。相遇节点即为环路的起始节点。
思考:实际上,巧妙地运用了速度为两倍的追赶相遇问题:他们会在前者的对称位置相遇。
相关文章推荐
- 常见文件介绍
- CSS3对背景图片的裁剪及尺寸和位置的设定方法
- poj1222 熄灯问题
- 利用JQuery写一个简单的异步分页插件
- jquery+json实现分页效果
- Java中的名称规范
- Linux命令行日常系快捷键
- javax.naming.ServiceUnavailableException
- ffmpeg推流器
- ump 中使用ConnectAsync连接服务器出现AccessDenied
- icon font
- [置顶] android开发之edittext弹出输入框遮挡住文字。解决方法
- 《从零开始学Swift》学习笔记(Day 55)——使用try?和try!区别
- iOS对UIViewController生命周期和属性方法的解析
- TortoiseSVN webstorm命令行
- Eclipse下配置Ant脚本 自动打包带签名的Android apk
- Android proguard混淆注意事项
- Linux中安装jdk的配置环境
- springmvc机制
- vc6 转 vc2015 问题