题目:环形链表
使用的是双指针(快慢指针)
如果链表中此存在环的话,那么两个指针就一定会在这个环内循环,也就一定会相遇,因此可以将两个指针相等作为链表中存在环的判断条件(至于为什么会相遇:这里令慢指针的速度为1,快指针速度为2,两者的相对速度为1,所以在进入环之后,相当于是快指针在以1的速度追慢指针,之后一定会追上)
注:这里的两个if一定要先判断head与fast是否为空!!!!!
1bool hasCycle(ListNode *head)
2 {
3 if(head == nullptr || head->next == nullptr) return false;
4 ListNode *slow = head, *fast = head->next;
5 while(slow != fast)
6 {
7 if( fast == nullptr || fast->next == nullptr) return false;
8 slow = slow->next;
9 fast = fast->next->next;
10 }
11 return true;
12 }