有如下数据结构
class Node { public int Value { get; set; } public Node Next { get; set; } }
现有一个Node node对象,表示一个单向链表,判断这个单向链表是否有环
public bool IsCricle(Node node) { Node fast = node; Node slow = node; while (node.Next != null) { slow = slow.Next; fast = fast.Next; if (fast != null && fast.Next != null) fast = fast.Next; else return false; node = node.Next; if (fast == slow) return true; } return false; }
使用两个指针,快的指针每次走两个节点,慢的指针每次走一个节点,如果有环,快的指针必然会在某个时刻与慢的指针指向同一个节点。