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; 
    
        }
  • 相关阅读:
    基于Html5的爱情主题网站–表白神器
    一个基于WebGL的仿真3D水池有逼真的水波纹效果
    一些纯css3写的公司logo
    IIS、SQL SERVER和VS的安装顺序
    SQL Server 2008 收缩日志 清空删除大日志文件
    判断SqlConnection连接是否关闭
    正则
    C# MD5加密字符串
    sqlServer MD5
    sqlserver 连接数
  • 原文地址:https://www.cnblogs.com/wft1990/p/7452792.html
Copyright © 2011-2022 走看看