题目
答案示例
代码
/**
* 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,*fast;
slow = head;
fast = head->next;
while(slow!=fast){
if(fast == NULL || fast->next == NULL) return false;
else{
slow = slow->next;
fast = fast->next->next;
}
}
return true;
}
思路
代码的核心是使用两个指针,一个快指针,一个慢指针。快指针每次走两步,慢指针每次走一步
如果没有环,那么快指针就会先为NULL
如果有环,那么快指针和慢指针一定会相遇(套圈)
代码中
if (fast == NULL || fast->next == NULL) return false;
条件fast == NULL表示的是快指针为NULL,走到了链表的末尾,说明没有环
条件fast->next == NULL ,如果快指针的下一个结点为NULL,那么在下一次循环的时候fast->next->next就会发生错误,同样表明是没有环的。只有当这两个条件都不满足的时候,才能继续激动快慢指针