力扣——环形链表(链表)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;
}
相关推荐
We་ct3 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
leoufung9 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了9 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
代码中介商9 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
MegaDataFlowers10 小时前
206.反转链表
数据结构·链表
爱编码的小八嘎11 小时前
C语言完美演绎9-12
c语言
样例过了就是过了12 小时前
LeetCode热题 不同路径
c++·算法·leetcode·动态规划
Navigator_Z13 小时前
LeetCode //C - 1031. Maximum Sum of Two Non-Overlapping Subarrays
c语言·算法·leetcode
xieliyu.14 小时前
Java手搓数据结构:从零模拟实现无头双向非循环链表
java·数据结构·链表
如何原谅奋力过但无声15 小时前
【灵神高频面试题合集01-03】相向双指针、滑动窗口
数据结构·python·算法·leetcode