/*
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
*/
class Solution {
public:
bool hasCycle(ListNode *head)
{
ListNode* fast=head;
ListNode* slow=head;
while(*fast!=NULL&&(*(fast->next)!=NULL))
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
return 1;
}
return 0;
}
};
题解:两个指针,一个一次走两个,一个一次走一个,如果可以再次相遇则说明链表存在循环。注意卡边界条件,即fast的两次移位都没有移出边界
链表循环检测

本文介绍了一种使用快慢指针的方法来判断链表是否存在循环。通过一个指针每次移动两个节点,另一个指针每次移动一个节点的方式,如果两者能够再次相遇,则表明链表中存在循环。文中特别强调了边界条件的处理。
439

被折叠的 条评论
为什么被折叠?



