美文网首页算法
判断一个单链表是否有环及环长和环的入口点

判断一个单链表是否有环及环长和环的入口点

作者: 有苦向瓜诉说 | 来源:发表于2016-09-22 19:17 被阅读100次

判断是否有环

常用方法:追赶法,即设两个指针q与 p,都从头结点出发,一个一次两个结点,q=q->next->next,一个一次一个结点,p=p->next,如果q==NULLp==NULL则单链表无环;如果q==p则单链表有环;注意需要判断q->next==NULL是否成立;

{
    node *q,*p;
    p=q=head->next;
    if (q!=NULL&&q->next!=NULL)
    {
            p=p->next;
            q=q->next->next;
    }
    while (q!=NULL&&q->next!=NULL)
    {
        if (q!=p)
        {
            p=p->next;
            q=q->next->next;
        }
        else{
            return 1;
        }
    }
    return 0;
} ```


## 环长
```  //返回有环链表的环长 
int length(linklist head)
{
    int begin=0,again=0,length=0;
    node *fast=head,*slow=head;
    while (fast!=NULL&&fast->next!=NULL)
    {
        fast=fast->next->next;
        slow=slow->next;
    
        if (fast==slow&&again==1)//特别注意一下这里的顺序,若把第一个if与第二个if调换有错误。 
        {
            break;
        }
        if (fast==slow&&again==0)
        {
            begin=again=1;
        }
        if (begin==1)
        {
            ++length;
        }
    } 
//  printf("\n%d %d\n",begin,again);
    return length;
} 

入口点位置

node *Entraence(linklist head)
{
    node *fast=head->next,*slow=head->next;
    while (fast!=NULL&&fast->next!=NULL)
    {
        fast=fast->next->next;
        slow=slow->next;
        if (fast==slow)
        {
            break;
        }
    }
    slow=head->next;
    while (slow!=fast)
    {
        slow=slow->next;
        fast=fast->next;
    }
    return fast;
}

相关文章

  • 判断单链表是否有环、求环长和环入口最优算法

    判断单链表是否有环、求环长和环入口最优算法 判断单链表是否有环是一个十分经典的算法问题,许多考试或者面试都有很大的...

  • 检测链表有环

    题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点。 一、单链表是否有环 思路分析: 单链表有环,是指...

  • P111-判断一个单向链表是否构成了环形,找出环的出口

    判断是否为环 思路1 两个指针 思路2 map 求入口 参考:链表有环,判断环的入口点 求环长 参考:那么如何得到...

  • 有环单链表的相关问题

    问题:判断单链表是否有环;若有环,找出环的入口节点;若有环,求出环上节点的个数;若有环,求出整个链表的节点的个数;...

  • 单链表中存在环的相关问题Java实现

    问题描述 判断一个单链表是否有环? 如果存在环,如何得到环中节点的数目? 如果存在环,如何找到环的入口? 解题思路...

  • 判断一个单链表是否有环及环长和环的入口点

    判断是否有环 常用方法:追赶法,即设两个指针q与 p,都从头结点出发,一个一次两个结点,q=q->next->ne...

  • 链表 环

    1 链表是否有环先使用快慢指针确定是否有环2 链表环交点L代表环之前的长度x代表环入口点与相遇处的长度R代表环的长...

  • 单链表是否存在环

    面试题:如何检测一个单链表是否有环?如果有环的入口在哪里? 题目描述: 单链表有环指的是单链表中某个结点的next...

  • 2022-02-27环形链表linked-list-cycle

    1.判断单链表是否有环 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续...

  • 算法题面试复习

    算法模块 1. 链表 1. 链表翻转 2. 单链表判断是不是环+求环位置+求环长度 以图片为例,假设环入口距离链表...

网友评论

本文标题:判断一个单链表是否有环及环长和环的入口点

本文链接:https://www.haomeiwen.com/subject/oxgzettx.html