检查单链表是否存在闭环

博客介绍了单链表中快慢指针的移动方式,慢指针每次移动一步,快指针每次移动两步,通过判断 slow 是否等于 quick 来确定指针相遇情况,还附上了转载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

慢指针每次都slow=slow->next;

而快指针每次都quick=quick->next->next;

如果slow==quick;

附上转载链接https://blog.youkuaiyun.com/kiripeng/article/details/81078493


#include "stdafx.h"
#include "iostream"

struct Node
{
    Node() : pNext(nullptr) {};

    Node* pNext;
};

bool IsRing(Node* pHead)
{
    if (!pHead || !pHead->pNext)
    {
        return false;
    }

    Node* pSlow = pHead;
    Node* pQuick = pHead->pNext;

    while (pSlow && pQuick && pQuick->pNext && pSlow != pQuick)
    {
        pSlow = pSlow->pNext;
        pQuick = pQuick->pNext->pNext;
    }

    return pSlow == pQuick;
}

int main()
{
    Node* pNode_1 = new Node;
    Node* pNode_2 = new Node;
    Node* pNode_3 = new Node;
    Node* pNode_4 = new Node;
    Node* pNode_5 = new Node;
    Node* pNode_6 = new Node;

    //构造闭环
    pNode_1->pNext = pNode_2;
    pNode_2->pNext = pNode_3;
    pNode_3->pNext = pNode_4;
    pNode_4->pNext = pNode_5;
    pNode_5->pNext = pNode_6;
    pNode_6->pNext = pNode_3;

    std::cout << IsRing(pNode_1) << std::endl;

    getchar();

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值