单链表之链表环的入口结点
2015-10-19 12:43
211 查看
链表环的入口结点:
在《链表头》与《相遇点》分别设一个指针,每次各走一步,两个指针必定相遇,且相遇第一点为环入口点。
在《链表头》与《相遇点》分别设一个指针,每次各走一步,两个指针必定相遇,且相遇第一点为环入口点。
public static Node findLoopPort(Node head){ if(head == null) return null; Node fast = head; // 快指针每次前进两步 Node slow = head; // 慢指针每次前进一步 while (fast != null && fast.next != null) { fast = fast.next.next;//fast走两步 slow = slow.next;//slow走一步 if (fast == slow) { // 相遇,存在环 break; } } if(fast==null||fast.next==null){ return null; } //至此,两个节点已经相遇了slow=fast=相遇点 于是,在链表的表头与相遇点分别设置一个指针,每次各走一步,两个指针必定相遇,且相遇的第一点是环的入口。 //表头指针 slow = head; //此时fast指向相遇点,slow指向链表头 //找最终相遇点(相等),条件就是两个指针不相等。 while(slow != fast){ slow = slow.next; fast = fast.next; } //相遇的地方就是入口点 return slow; }
相关文章推荐
- Oracle 10G如何从recovery catalog中Unregister目标数据库
- <constant name="struts.objectFactory" value="spring" />
- a valid provisioning profile not found
- 结构型模式之三——组合模式
- 单链表之两链表相交的第一个公共节点
- 字符串专题
- Codeforces 574 A. Bear and Elections
- 机器学习:实例1--推荐系统架构
- 你可能不知道的 Linux 命令行网络监控工具
- USACO-1.3:Combination Lock
- 单链表之判断一个单链表中是否有环
- oracle-sql-union用法
- 日报2015/10/19(第一行代码读书笔记)
- ubuntu 14.04 安装java8
- 【C++】枚举量注意
- Android DownloadManager下载进度查询(系列3)
- 数据库笔试题
- 黑马程序员——简单数据存储
- ROC曲线
- Ubuntu上安装Node.js