如何判断链表中有环

原创 2017年01月03日 11:45:17

单链表

单链表:链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值。
这里写图片描述
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接,链表最基本的结构是在每个节点保存数据和到下一个节点的地址,在最后一个节点保存一个特殊的结束标记,另外在一个固定的位置保存指向第一个节点的指针,有的时候也会同时储存指向最后一个节点的指针。一般查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。但是也可以提前把一个节点的位置另外保存起来,然后直接访问。当然如果只是访问数据就没必要了,不如在链表上储存指向实际数据的指针。这样一般是为了访问链表中的下一个或者前一个(需要储存反向的指针,见下面的双向链表)节点。


如何判断链表中有环

一、判断链表是否存在环,办法为:

设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:

bool IsExitsLoop(slist *head)
{
    slist *slow = head, *fast = head;

    while ( fast && fast->next ) 
    {
        slow = slow->next;
        fast = fast->next->next;
        if ( slow == fast ) break;
    }

    return !(fast == NULL || fast->next == NULL);
}

代码出处

版权声明:本文为博主原创文章,未经博主允许不得转载。

[转载] 如何判断链表中有无环

单向链表中有环的话,如果我们对此链表进行遍历,则将无穷尽。因此有必要判断一个单向链表是否有环。 假如一个单向链表中存在环,如下图:(一个小矩形代表链表中的一个节点) 虚线箭头代表中间有无数节点。 ...

链表中有环——怎么判断

对于给定的单链表,有如下问题: 1. 如何判断该链表中是否有环存在? 2. 如何计算出链表中环的长度? 3. 如何找到环的连接点,即环的入口? 4. 如何计算带环链表的长度?对...

单链表中有环判断

昨天去面试了一把,面试官给出了这道题。当时我知道一定有什么巧妙的办法,但是我并没有想到。我只是想到了通用的方法,顺序遍历然后为遍历过的节点依次做标志。也试图去想了些特殊的访法,不过都有一定的局限性。事...

linux内核中有一个通用的双向循环list链表

linux内核中有一个通用的双向循环list链表 为什么称他为通用的呢?首先我们还是来看一下内核中list中的结点是怎样定义的位于文件../list's中: 从此结构可以看出没有数据成员。 ...

如何确定一个链表中有闭环,如果有怎么确定起始点?

这个问题很有趣,首先我第一个直觉是用图论的知识来解决,但是这是不可行的.因为我们没有办法将每一个节点的信息保存起来(这样的代价过于巨大,每一个节点标志唯一的就是它本身的地址,但是地址这个信息不能直接映...

java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head

/** * 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意, * 输出结果中请不要返回参数中的...
  • pomay
  • pomay
  • 2017年05月19日 17:08
  • 413

用dfs的方法判断图中有没有负环

//原理:用一个点去更新和他相连的一条边,然后在用相连的点去更新和当前的点相连的边,一次下去, 当连到之前更新过的点的时候, 就说明有负环。dfs的深度是不会超过 //当前这棵生成树的点数+2....

hdu 3394(求无向图块判断每个块中有多少个环)

题目链接:hdu 3394 题意描述:公园有n个景点,公园的管理员计划要建m条道路,并且安排一些形成回路的参观路径,如果一条道路可以被多条回路共用,那么这条边是冲突边,如果不能形成环的路则为...

暑假集训 8.16 sdutoj3642 判断给定森林中有多少棵树特别版 (简单考查邻接表)

判断给定森林中有多少棵树特别版 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  众人皆知,在编程领域中,C++...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何判断链表中有环
举报原因:
原因补充:

(最多只允许输入30个字)