解题思路
1.双指针法(快慢指针):设置两个工作指针,一个为fast,一个为slow,fast移动两次的同时slow移动一次,这样后每次slow就和fast拉开1个距离,如果链表中存在环,那么fast总有和slow相遇的时候,如果没有则fast会指到NULL或者next为NULL的地方
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
if(!head)
return 0;
struct ListNode *fast = head;
struct ListNode *slow = head;
while(fast&&fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(fast == slow)
return 1;
}
return 0;
}