#include <stdbool.h>
#include <stdlib.h>
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* @author Senky
* @date 2023.04.15
* @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
* @brief 快慢指针,slow一次移动一个结点,fast一次移动两个结点,只要有环,fast指针迟早会追上slow
* @param head ListNode类
* @return bool布尔型
*/
bool hasCycle(struct ListNode* head ) {
// write code here
struct ListNode* slow = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* fast = (struct ListNode*)malloc(sizeof(struct ListNode));
slow = head;
fast = head;
int IsCycle = 0;
/*
*fast是判断链表是否为空,fast->nest是判断链表是否有表尾
*因为快指针一次移动两个结点fast = (fast->next)->next,所以(fast->next)不能为空
*/
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
{
IsCycle = 1;
break;
}
}
return IsCycle;
}