//list链表的题目
class Solution {
public:ListNode *detectCycle(ListNode *head) {
if(head==NULL)
return NULL;
ListNode *first=head;
ListNode *second=head;
ListNode *temp;
while(second->next!=NULL && second->next->next!=NULL)
{
first=first->next;
second=second->next->next;
if(first==second)
{
first=head;
while(first!=second)
{
second=second->next;//这里很重要,是link list的重点理解之处
first=first->next;
}
return first;
}
}
return NULL;
}
};
本文介绍了一种使用快慢指针技术检测链表中是否存在循环的有效算法。通过两个速度不同的指针遍历链表,若存在循环则快慢指针必定相遇。之后重新设置一个指针从头节点出发,与相遇后的指针同步前进,再次相遇的位置即为循环的起始点。
1210

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



