方法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
struct ListNode* slow = head, *fast = head;
while(fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
{
return true;
}
}
return false;
}
思路:
快慢指针思想:创建两个指针,同时指向头节点,之后慢指针每次走一步,快指针走两步。创建循环,终止条件是快指针走到链表尾。如果有环,那么快慢指针会在环中相遇,返回true。如果没有环,则遍历完链表之后返回fasle。