美文网首页
[算法学习]--判断链表是否有环

[算法学习]--判断链表是否有环

作者: Alex_LoveYing | 来源:发表于2020-01-19 17:48 被阅读0次

    单链表有环,是指单链表中某个节点的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;
    }
    

    相关文章

      网友评论

          本文标题:[算法学习]--判断链表是否有环

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