判断单链表有闭环

有如下数据结构

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;
}

 使用两个指针,快的指针每次走两个节点,慢的指针每次走一个节点,如果有环,快的指针必然会在某个时刻与慢的指针指向同一个节点。

 

posted on 2015-07-07 14:55  alex_cool  阅读(1046)  评论(0编辑  收藏  举报