zoukankan      html  css  js  c++  java
  • 一个链表中环的入口

    一个链表中包含环,请找出该链表的环的入口结点。

    思路:

    第一步,找环中相汇点。分别用slow,fast指向链表头部,slow每次走一步,fast每次走二步,直到slow==fast找到在环中的相汇点。

    第二步,找环的入口。接上步,当slow==fast时,fast所经过节点数为2x,slow所经过节点数为x,设环中有n个节点,fast比slow多走一圈有2x=n+x;     n=x;可以看出slow实际走了一个环的步数,再让fast指向链表头部,slow位置不变,slow,fast每次走一步直到slow==fast;  此时slow指向环的入口。

    ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
            if(pHead==NULL||pHead->next==NULL||pHead->next->next==NULL) return NULL;
            ListNode* slow=pHead;
            ListNode* fast=pHead;
            while(slow!=NULL&&fast->next!=NULL)
            {
                if(slow->next&&fast->next->next)//快慢指针的移动
                {
                    slow=slow->next;//慢指针移动一步
                    fast=fast->next->next;//快指针移动两步
                    if(slow==fast)//如果快慢指针相遇,让慢指针不动,快指针指向指针头部
                    {
                        fast=pHead;
                        while(fast!=slow)//快慢指针一起向后移动一步,直至相遇即为环入口节点
                        {
                           slow=slow->next;
                           fast=fast->next;
                        }
                        return slow;
                    }
                }
                else
                {
                    return NULL;
                }
            }
            return NULL; 
    
        }
  • 相关阅读:
    redis 数据库总结
    drf 序列化类总结
    drf 视图类经典总结
    celery 简介
    虚拟环境搭建pip换源
    git 与 svn,简介差别
    redis 数据库简介
    auth 模块
    python的注释与用户交互 基本数据类型
    python入门
  • 原文地址:https://www.cnblogs.com/wft1990/p/7452792.html
Copyright © 2011-2022 走看看