floyd判环(龟兔赛跑)算法

板子题https://leetcode-cn.com/problems/linked-list-cycle/submissions/
又称快慢指针算法
本算法用来判断(链表)中是否存在环

显然若乌龟(慢)和兔子(快)在操场上跑步,无论两者谁先跑、从哪个地方起跑,一定存在某个时刻兔子与乌龟相遇
(逻辑题)
那么定义两个指针slow和fast,slow指针一次向后走一步,fast指针一次向后走两步,若两指针相遇则链表中必定有环

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    if(head == NULL || head->next==NULL)
        return false;
    struct ListNode *slow=head;
    struct ListNode *fast=head->next;
    while(slow != fast)
    {
        if(fast==NULL || fast->next==NULL)
            return false;
        slow=slow->next;
        fast=fast->next->next;
    }
    return true;
}
posted @ 2020-11-10 20:33  快乐永恒  阅读(141)  评论(0编辑  收藏  举报