题解 | #链表中环的入口结点#

链表中环的入口结点

http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) 
{
    // write code here
    struct ListNode* slow=pHead;//慢指针
    struct ListNode* fast=pHead;//快指针
    while(fast && fast->next)
    {
        slow=slow->next;//慢指针走一步
        fast=fast->next->next;//快指针走两步
        if(slow==fast)//如果相遇说明有环
        {
            struct ListNode* meet=slow;
            struct ListNode* list=pHead;
            while(meet!=list)//他俩相遇的节点,就是环的入口
            {
                meet=meet->next;//一个指针从相遇的结点开始走
                list=list->next;//一个指针从头节点开始走
            }
            return meet;
        }
    }
    
    return NULL;
}
(N-1)*c+c-x=l
n:快指针绕环走了多少圈
c:环的长度
x: 快指针和慢指针在环中相遇的节点
l: 头节点到环的长度
全部评论

相关推荐

迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务