【数据结构】单链表练习(有环)

1.判断是否是环形链表

141. 环形链表 - 力扣(LeetCode)

复制代码
bool hasCycle(struct ListNode *head) 
{
    struct ListNode *fast,*slow;
    fast=slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;

        if(fast==slow)
        return true;
    }
    return false;
}

2.环形链表2.0

142. 环形链表 II - 力扣(LeetCode)

思考:

slow走的路程:L+X

fast走的路程:L+N*C+X

2*(L+X)=L+N*C+X

L=N*C-X

结论:一个指针从相遇点开始走,另一个指针从起始点开始走,他们会在入口点相遇

复制代码
struct ListNode *detectCycle(struct ListNode *head) 
{
    struct ListNode *fast,*slow;
    fast=slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;

        if(fast==slow)
        {
            struct ListNode *meet=slow;
            struct ListNode *start=head;

             while(meet!=start)
            {
            start=start->next;
            meet=meet->next;
            }
            return meet;
        }
    }
    return NULL;
}

相关推荐
小星星闪亮登场7 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
冻柠檬飞冰走茶8 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
2501_942389559 小时前
Epoch AI旗下FrontierMath的负责人Elliot Glazer
数据结构·决策树·动态规划·散列表
shylyly_10 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
白白白小纯14 小时前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
zander25815 小时前
35. 搜索插入位置:从边界语义理解二分查找
数据结构·算法·leetcode
Chen—LSN16 小时前
C语言——深度理解指针(5)
c语言·数据结构·算法·排序算法
佳児素花痴╮18 小时前
树的基础知识与查找排序算法
数据结构·算法
郝学胜-神的一滴18 小时前
Python 高级编程 026:内置数据结构之骈文纵论
开发语言·数据结构·python·程序人生·软件工程
程序员老舅1 天前
啃透 I2C 驱动开发,才算入门嵌入式 Linux 内核驱动
数据结构·驱动开发·b树·内核·嵌入式·嵌入式开发·i2c