判断给定的链表中是否有环。如果有环则返回true,否则返回false。
我们使用两个指针,quick 与 slow。
它们起始都位于链表的头部。随后,quick 指针每次向后移动一个位置,而slow指针向后移动两个位置。如果链表中存在环,经历n次循环后,quick指针最终将再次与 slow 指针在环中相遇。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param head ListNode类
* @return bool布尔型
*/
#include <stdbool.h>
bool hasCycle(struct ListNode* head ) {
if(head == NULL||head->next == NULL){
return false;
}
struct ListNode *quick = head;
struct ListNode *slow = head;
while(quick){
quick = quick->next;
slow = slow->next;
if(quick){
quick = quick->next;
}
if(quick == slow){
return true;
}
}
return false;
}