力扣——环形链表(链表)C语言

题目:

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false

原理:

这里也可以利用快慢指针的方法,设置两个结点都指向头结点,慢指针一次走一步,快指针一次走两步,当慢指针也进入循环时,快指针就开始对慢指针,开始追赶,直到两个指针相等时,则可判断这里存在循环,如果快指针走到指为NULL,说明不存在循环。

代码:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) 
{
    ListNode* slow=head;
    ListNode* fast=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
        if(slow==fast)
        {
            return true;
        }
        
    }
    return false;
}
相关推荐
前端玖耀里27 分钟前
Linux C/C++ 中系统调用与库函数调用的区别
linux·c语言·c++
TracyCoder1231 小时前
LeetCode Hot100(28/100)——104. 二叉树的最大深度
算法·leetcode
执着2591 小时前
力扣hot100 - 101、对称二叉树
数据结构·算法·leetcode
进击的小头1 小时前
设计模式与C语言高级特性的结合
c语言·设计模式
代码无bug抓狂人2 小时前
C语言之可分解的正整数(蓝桥杯省B)
c语言·开发语言·算法
历程里程碑2 小时前
21:重谈重定义理解一切皆“文件“及缓存区
linux·c语言·开发语言·数据结构·c++·算法·缓存
TracyCoder1233 小时前
LeetCode Hot100(24/100)——21. 合并两个有序链表
算法·leetcode·链表
恶魔泡泡糖3 小时前
51单片机I2C-EEPROM
c语言·单片机·嵌入式硬件·51单片机
We་ct3 小时前
LeetCode 1. 两数之和:两种高效解法(双指针 + Map)
前端·算法·leetcode·typescript·哈希算法
YuTaoShao3 小时前
【LeetCode 每日一题】3640. 三段式数组 II——(解法二)DP
算法·leetcode·职场和发展