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

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;
}

相关推荐
数据智能老司机2 小时前
图算法趣味学——桥和割点
数据结构·算法·云计算
John.Lewis3 小时前
数据结构初阶(11)排序的概念与运用
c语言·数据结构·排序算法
FPGA4 小时前
曼彻斯特编解码:数字世界的“摩斯密码”与FPGA高效实现
数据结构
数据智能老司机4 小时前
图算法趣味学——图遍历
数据结构·算法·云计算
Gu_shiwww5 小时前
数据结构3线性表——单链表(C)
c语言·开发语言·数据结构
科大饭桶6 小时前
Linux系统编程Day13 -- 程序地址空间(进阶)
linux·运维·c语言·数据结构·c++
C_Liu_7 小时前
C语言:队列的实现和剖析
c语言·开发语言·数据结构
定偶8 小时前
Notepad++插件开发实战
开发语言·数据结构·notepad++
屁股割了还要学12 小时前
【数据结构入门】堆
c语言·开发语言·数据结构·c++·考研·算法·链表
源代码•宸15 小时前
MySQL 索引:索引为什么使用 B+树?(详解B树、B+树)
数据结构·数据库·经验分享·b树·mysql·b+树·b-树