给你一个链表的头节点 head
,判断链表中是否有环。
//使用快慢指针 如果不成环 快指针最后会指向空 如果成环 遍历之后快慢指针会相遇
bool hasCycle(struct ListNode *head)
{
struct ListNode* slow=head,*fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
{
return true;
}
}
return false;
}
给定一个链表的头节点 head
,返回链表开始入环的第一个节点。 如果链表无环,则返回 null
。
struct ListNode *detectCycle(struct ListNode *head)
{
struct ListNode*slow=head,*fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
{
struct ListNode*meet=slow;
while(head!=meet)
{
head=head->next;
meet=meet->next;
}
return meet;
}
}
return NULL;
}