链表判圈算法

该博客介绍了一种使用Floyd判圈算法来判断单链表中是否存在环的方法。通过反向指针,当指针回到链表头结点时,确认链表存在环,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

题面:

判断一个单链表是否包含一个环;

解法:

Floyd判圈算法可以解决此问题;

这里提供另外一种算法,当然这种算法只能判断是否有环,并不能求出环的长度;

1、很容易明白当一个链成环时,它会绕着指针回到环的起点;

2、那么当我们把环的起点的指针反向指回去的时候,我们就可以顺利找到链表的起点;

3、看到这里应该是很明白了,我们通过把指针反向指回去,如果当指针又回到链表头结点时,表示有环;

4、时间的时空复杂度都为O(n);

 代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值