第一百四十一题:网上借鉴
1.边界情况:
根结点为空。
2.思路:
这道题的方法还是比较奇妙的,利用了追及问题的思想,假设有一操场跑道L米,甲的速度位v甲,乙的速度位v乙,设两者相距a米(列出方程 设时间t相遇 v乙*t-v甲*t = L - a);方程有解表示无论在操场那个位置开始跑乙都会追上甲,类比此问题,利用两个指针一个指针快一次前进一步,一个指针快一次前进两步,如果没有环存在那么就会指向空指针,如果有环两个指针必定会相遇,即快指针地址 = 慢指针地址。
bool hasCycle(ListNode *head) {
ListNode* first = head;
ListNode* second = head;
while (first != NULL&&second != NULL&&second->next != NULL){ //注意这个条件判断不能写漏了。
first = first->next;
second = second->next->next;
if (first == second)
return true;
}
return false;
}