有如下数据结构
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;
}
使用两个指针,快的指针每次走两个节点,慢的指针每次走一个节点,如果有环,快的指针必然会在某个时刻与慢的指针指向同一个节点。