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

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

相关推荐
AuroraWanderll13 小时前
深入理解C++多态(三):多态的原理——虚函数表机制(上)
c语言·开发语言·数据结构·c++·算法·stl
报错小能手13 小时前
数据结构 带头节点的双向循环链表
数据结构·算法·链表
Yolo_TvT14 小时前
数据结构:算法复杂度
数据结构·算法
带土114 小时前
14. 某马数据结构整理(2)
数据结构
OKkankan14 小时前
多态概念及使用
开发语言·数据结构·c++·算法
lxh011314 小时前
合并K个升序链表题解
前端·数据结构·链表
北冥湖畔的燕雀14 小时前
二叉搜索树:高效查找与删除的实现
数据结构·c++·算法
kupeThinkPoem14 小时前
线段树有哪些算法?
数据结构·算法
小许学java15 小时前
数据结构-包装类和泛型
数据结构·泛型·包装类·java-se
似水এ᭄往昔15 小时前
【C++】--二叉搜索树
开发语言·数据结构·c++