【力扣-141】 环形链表 + 【力扣-142】 环形链表 II

文章介绍了霍桑效应的概念,强调了积极反馈对个人行为的影响。接着详细讨论了如何检测和处理环形链表的问题,提供了两种不同的代码实现,一种用于判断链表是否存在环,另一种用于找到环的入口节点。文章鼓励读者理解思路,即使遇到困难也不要气馁。
摘要由CSDN通过智能技术生成

🖊作者 : Djx_hmbb
📘专栏 : 数据结构
😆今日分享 : 霍桑效应(霍索恩效应) : 是指那些意识到自己正在被别人观察的个人具有改变自己行为的倾向。
霍桑效应告诉我们:从旁人的角度,善意的谎言和夸奖真的可以造就一个人;从自我的角度,你认为自己是什么样的人,你就能成为什么样的人。
请添加图片描述

🖋题目链接:

【力扣-141】 环形链表
【力扣-142】 环形链表 II

✔题目>环形链表 :

在这里插入图片描述

🔎代码详情:

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

✔题目>环形链表 II:

在这里插入图片描述

✔解题思路:

请添加图片描述

如果链表存在环,则fast和slow会在环内相遇,定义相遇点到入口点的距离为X,定义环的长度为C,定义头到入口的距离为L,fast在slow进入环之后一圈内追上slow,则会得知:
slow所走的步数为:L + N
fast所走的步数为:L + N + K * C
并且fast所走的步数为slow的两倍,故:
2*(L + N) = L + N + K * C
即: L = K * C - N
所以从相遇点开始slow继续走,让一个指针从头开始走,相遇点即为入口节点

🔎代码详情:

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(slow == fast){
            struct ListNode *meet = slow;
            struct ListNode *start = head;
            while(meet != start){
                meet = meet->next;
                start = start->next;
            }
            return meet;
        }
    }
    return NULL;
}

总结:

这个题目考察的主要是思维,如果是在搞不懂,也不用太气馁,慢慢来,实在不行,咱记住怎么写的就行,问题不大!


感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D. Star.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值