起初看到这个题目,毫无头绪,没有理解题目意思,后来在网上看了一下大家的思路,写一下我现在看到最简单的一种方法:
- 利用两个指针,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;
}
};