【笔试/面试】—— 判断一个链表是否有环

链表的有环无环性,也即是否尾部的 next 指向 head,是否首尾相连。

要求不能使用标志位,最多只能用两个额外指针。

思路:设置两个指针,一个每次递增一步,一个每次递增两步,如果有环的话,二者必然重合;如果无环,快指针走到最后,程序会退出。

struct Node
{
    int val;
    Node* next;
};

bool check(Node* head)
{
    if (!head) return false;
    Node *low = head, *fast = head->next;
    while (!fast && !fast->next)
    {
        low = low->next;
        fast = fast->next->next;    // 能进入循环,走到这一步,必然说明,fast->next 不为空,
        if (fast == low)
            return true;            // 突然死亡法
    }
    return false;
}

你可能感兴趣的:(【笔试/面试】—— 判断一个链表是否有环)