起初看到這個題目,毫無頭緒,沒有理解題目意思,後來在網上看了一下大家的思路,寫一下我現在看到最簡單的一種方法:
- 利用兩個指針,slow,fast。兩者均從頭開始,slow每次一步,fast每次2步,如果是一個環的話,它們倆肯定會碰到;
- 如果在沒有碰到之前有指針到NULL,則不存在環,因爲fast跑的比較快,只用判斷fast,fast->next是否爲NULL即可;
- 邊界條件:如果只有一個節點,則肯定不存在環;
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *slow = new ListNode(0), *fast = new ListNode(0);
slow = head;
fast = head;
while(fast != NULL && fast->next != NULL)
{
slow = slow->next; //one step
fast = fast->next->next; //two step
if(slow == fast)
return true;
}
return false;
}
};