求有环单链表的环连接点位置
2016-07-19 21:58
162 查看
第一次碰撞点Pos到连接点Join的距离=头指针到连接点Join的距离,
因此,分别从第一次碰撞点Pos、头指针head开始走,相遇的那个点就是连接点。
在环上相遇后,记录第一次相遇点为Pos,连接点为Join,假设头结点到连接点的长度为LenA,连接点到第一次相遇点的长度为x,环长为R。
第一次相遇时,slow走的长度 S = LenA + x;
第一次相遇时,fast走的长度 2S = LenA + n*R + x;
所以可以知道,LenA + x = n*R; LenA = n*R -x;
因此,分别从第一次碰撞点Pos、头指针head开始走,相遇的那个点就是连接点。
在环上相遇后,记录第一次相遇点为Pos,连接点为Join,假设头结点到连接点的长度为LenA,连接点到第一次相遇点的长度为x,环长为R。
第一次相遇时,slow走的长度 S = LenA + x;
第一次相遇时,fast走的长度 2S = LenA + n*R + x;
所以可以知道,LenA + x = n*R; LenA = n*R -x;
int getLenA(Linklist list,LinkNode *meetNode){ int lenA=0; LinkNode *fast = list; LinkNode *slow = meetNode; for(;;){ fast = fast->next; slow = slow->next; lenA++; if(fast == slow) break; } return lenA; }
相关文章推荐
- CentOS 7 VM下修改网卡名为eth0并启动问题解决
- android音乐播放器
- hdu5723 Abandoned country(最小生成树+任意点对距离)
- Django中Admin管理与权限管理(一)————模型创建
- Unity3d transform
- mysql字符集
- JS的循环语句
- java xml与json 相互转换
- Webservice简单概念
- tengine详细安装教程
- HDU 5215 Cycle --- 奇偶环的判定
- 个人转载收藏的文章
- 极客班C++(上)第一周课程笔记
- poj3177
- 组合/聚合复用原则详解--七大面向对象设计原则(7)
- 安卓拼图游戏(二)
- Linux下几款C++程序中的内存泄露检查工具
- 泛型Class<T>和 T. <T>
- 实现jQuery底层链式编程(一)
- 公司的法律形态