zoukankan      html  css  js  c++  java
  • [转]给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点

    转自:http://blog.csdn.net/dengsi23/article/details/7984291

    判断单向链表是否有环,可以采用快指针与慢指针的方式来解决。即定义一个快指针fast和一个慢指针slow,使得fast每次跳跃两个节点,slow每次跳跃一个节点。如果链表没有环的话,则slow与fast永远不会相遇(这里链表至少有两个节点);如果有环,则fast与slow将会在环中相遇。判断出链表有环以后,则需要算出进入环的第一个节点。在fast与slow第一次相遇后,设置一个节点pNode从链表的头部开始遍历,每次只遍历一个节点。这样,当fast与slow再次相遇时,pNode所处的位置便是环的首部。以下该问题的实现源码(C语言描述):

    LNode* GetLoopNode(LNode* head)
    {
        //前置条件的判断
        if (!head)
        {
            return NULL;
        }
    
        //定义一个快指针和一个慢指针
        LNode* fast = head;
        LNode* slow = head;
        while (fast && (fast->next))
        {
            fast = fast->next->next;
            slow = slow->next;
    
            if (fast == slow)
            {
                //如果有环,则返回环的第一个节点
                slow = head;
                while (1)
                {
                    fast = fast->next;
                    slow = slow->next;
    
                    if (fast == slow)
                    {
                        break;
                    }
                }
    
                return slow;
            }
        }
    
        return NULL;
    }

    EOF

  • 相关阅读:
    redis对string进行的相关操作
    bs4解析库
    redis对键进行的相关操作
    python常见的函数和类方法
    一些(也许)有用的技巧以及注意事项
    【复健内容】NOIP2020 题解
    类欧几里得的一个方法
    UOJ Round #12
    Goodbye Yiwei
    UOJ Round #11
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2807542.html
Copyright © 2011-2022 走看看