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

来源:互联网 发布:linux查看本地arp缓存 编辑:程序博客网 时间:2024/06/18 04:30

链表的有环无环性,也即是否尾部的 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;}
0 0
原创粉丝点击