求链表环入口位置
作者:互联网
/*************************************************************************
> File Name: 1-删除链表的倒数第N个节点.cpp
> Author:
> Mail:
> Created Time: Sat 19 Mar 2022 09:14:55 AM CST
通过快慢指针实现,快慢指针最初都指向头结点,让快指针每次走2步,慢指针每次走1步,
若有环,两指针必定会在环内相遇,相遇后再在头结点设置个指针indix1, 和在头结点设置指针indix,
让他们每次走一步,相遇之处就是环入口
************************************************************************/
struct ListNode
{
┊ int val;
┊ struct ListNode*next;
┊ ListNode(int val):val(val),next(nullptr){}
};
//查找环入口
ListNode *detectCycle(ListNode *head)
{
ListNode*fast=head;
ListNode*low=head;
while(fast!=nullptr &&fast->next!=nullptr)//考虑到只有一个节点所以加上fast->next!=nullptr
{
┊ ┊ fast=fast->next->next;
┊ ┊ low=low->next;
┊ ┊ if(low==fast)
┊ ┊ {
┊ ┊ ┊
┊ ┊ ListNode*indix1=fast;
┊ ┊ ListNode*indix=head;
┊ ┊ while(indix1!=indix)
┊ ┊ {
┊ ┊ ┊ ┊ indix=indix->next;
┊ ┊ ┊ ┊ indix1=indix1->next;
┊ ┊ }
┊ ┊ return indix;
┊ ┊ }
}
return nullptr;
}
标签:ListNode,位置,nullptr,fast,next,链表,入口,指针,indix 来源: https://blog.csdn.net/qq_24093081/article/details/123609218