9.2链表(六)——给定一个有环链表,实现一个算法返回环路的开头结点
2015-08-03 15:01
381 查看
/** * 功能:给定一个有环链表,实现一个算法返回环路的开头结点。 */ /** * 思路:fast的移动速度是slow的两倍。当slow走了k个结点进入环路,fast已经进入环路k个结点,即fast和slow * 相距loop_size -k个结点。 * 再走loop_ -k次后,碰撞,此时距离环路起始处k个结点。 * 链表首部与环路起始处均距离环路起始处k个结点。因此,保持其中一个不变,另一个指向链表首部,相会处 * 即为环路起始处。 * * 算法: * 1)创建两个指针,fast和slow。 * 2)slow每走一步,fast走两步。 * 3)碰撞时,将slow指向head,fast保持不变。 * 4)相同速度移动fast和slow,一次一步,返回碰撞结点。 * @param head * @return */ public static LinkedListNode findBeginging(LinkedListNode head){ LinkedListNode slow= head; LinkedListNode fast= head; while( fast!= null&& fast. next!= null){ slow= slow. next; fast= fast. next. next; if( slow!= fast) break; } if( fast== null|| fast. next== null) return null; slow= head; while( slow!= fast){ slow= slow. next; fast= fast. next; } return fast; }
相关文章推荐
- poj 2100 尺取法连续平方和
- 理解__getattr__和__getattribute
- android linux(centos6) gradle环境配置
- 取消IE提示下载安全提问
- Java多线程——<一>概述、定义任务
- mysql windows 安装与使用
- 操作分布式文件之八:如何批量并行读写远程文件和事务补偿处理
- Java删除ArrayList中的重复元素的2种方法
- git 用法
- HDU 4343 Interval query 倍增思想, DP
- JavaScript 中 Property 和 Attribute 的区别
- 存储及华为解决方案相关知识(一)
- win7 linux nat模式主机ping通虚拟机,虚拟机ping不通主机
- Intel 8086处理器
- 婚姻是爱情的坟墓,却又是爱情最好的归宿
- hihoCoder 1082 然而沼跃鱼早就看穿了一切
- UILabel自适应
- 15-07-24 HTML--表单
- FileZilla - Windows XP经典软件系列
- 致加西亚的信