使用C语言巧解单链表带环问题
什么是单环问题
1.1头部带环:
1.2中间带环
1.3 自身成环
如何解决这来问题呢?
使用快慢指针来解决这类问题:
定义两个指针,慢指针走一步,快指针走两步,假设单链表不带环,则快指针走到结束,如果带环,则慢指针在环中追上快指针,这是快慢指针的解决方法。
具体看图:
bool hasCycle(struct ListNode *head)
{
struct ListNode*fast=head;
struct ListNode*slow=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{
return true;
}
}
return false;
}