欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 142 环形链表II

142 环形链表II

2024/10/23 1:34:10 来源:https://blog.csdn.net/Noric_/article/details/142994240  浏览:    关键词:142 环形链表II

在这里插入图片描述
解题思路:
\qquad 之前在 环形链表I 中讲过利用快慢指针判断链表是否有环,当快慢指针相等时,链表中存在环。但环形链表II在其基础上,额外需要找到环的第一个节点,可以在快慢指针相遇的基础上,进一步分析。

\qquad 如果链表存在环,则快慢指针相遇于环上一点(如下图),将链表拆分成a, b, c三段,题目需要返回a、b段交界点的指针,由快慢指针相遇可得:

2 ( a + b ) = a + b + n ( b + c ) 2(a+b) = a + b + n(b+c) 2(a+b)=a+b+n(b+c)
a = n ( b + c ) − b a = n(b+c) - b a=n(b+c)b
a = c + ( n − 1 ) ( b + c ) a = c + (n-1)(b+c) a=c+(n1)(b+c)

\qquad 此时,如果使用两个指针分别从表头和相遇点开始移动,则这两个指针会相遇于环开始的节点,此时返回结果即可。 在这里插入图片描述

ListNode *detectCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;ListNode* pos = head;while(fast != nullptr){slow = slow->next;if(fast->next != nullptr){fast = fast->next->next;}else return nullptr;if(slow == fast){while(pos != slow){slow = slow->next;pos = pos->next;}return pos;}}return nullptr;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com