【算法学习】--判断链表是否有环

单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形成一个环形结构。

链表的节点结构如下:

typedef struct node
{
    int data;
    struct node *next;
} 

最常用方法:定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向 NULL)都没有追上第一个指针,那么链表就不是环形链表。

// 判断链表是否有环
bool IsLoop(NODE *head) // 假设为带头节点的单链表
{
    if (head == NULL)
        return false;

    NODE *slow = head->next; // 初始时,慢指针从头节点开始走1步
    if (slow == NULL)
        return false;

    NODE *fast = slow->next; // 初始时,快指针从头节点开始走2步
    while (fast != NULL && slow != NULL) // 当单链表没有环时,循环到链表尾结束
    {
        if (fast == slow)
            return true;

        slow = slow->next; // 慢指针每次走一步

        fast = fast->next;
        if (fast != NULL)
            fast = fast->next;
    }

    return false;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,608评论 1 45
  • 题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点。 一、单链表是否有环 思路分析: 单链表有环,是指...
    sherrysack阅读 712评论 0 0
  • 基本概念 链表的含义: 链表是一种用于存储数据集合的数据结构,具有以下属性 相邻元素之间通过指针相连 最后一个元素...
    古剑诛仙阅读 1,024评论 0 3
  • 两种实现方式: 哈希缓存法 思路:单链表中的环是指链表末尾的节点的 next 指针不为 NULL ,而是指向了链表...
    python与数据分析阅读 474评论 3 5
  • 在开发的过程中,可能需要一个账号管理其他多个账号的情况;以下操作:使用账号A来管理账号B步骤: 一、登录账号B: ...
    LibraGril阅读 1,819评论 0 0