判断是否是循环列表。
方法是使用双指针,一个快指针一个慢指针,快指针每次走两格,慢指针每次走一格。如果快指针先到达列表终点则return false,如果快慢指针相遇则return true
这里面涉及到为什么出现环的话,快慢指针一定会相遇的这个问题。
class Solution {
public:
bool hasCycle(ListNode *head) {
if (!head||!head->next) return false;
ListNode * quick = head, *slow = head;
while (quick->next && quick->next->next){
slow = slow->next;
quick = quick -> next ->next;
if (slow == quick){
return true;
}
}
return false;
}
};