问题描述:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
分析:这道题很有意思,一个list如果一旦有环,那么将会形成死循环,所以可以利用这个特点,使用两个指针,一个指针移动幅度为2,一个指针幅度为1,那么如果一旦存在环,那么这两个指针一定会有相同的时候,因为它们移动的速度不同,有点像小时候的追及问题。
代码如下:4ms
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
if(!head || !head->next)
return false;
struct ListNode *prev = head;
struct ListNode *next = prev->next;
while(prev&&next){
if(prev==next)
return true;
prev = prev->next;
if(!(next->next))
break;
next = next->next->next;
}
return false;
}