如何进入网站管理员界面,营销公司排行,推广平台怎么赚钱,第一站商城目录链接#xff1a;
力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目#xff1a;
https://github.com/September26/java-algorithms 原题链接#xff1a;
力扣 描述#xff1a;
给定一个链表的头节点 head #xff0c;返回链表开始入环的第一个节点。 如… 目录链接
力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目
https://github.com/September26/java-algorithms 原题链接
力扣 描述
给定一个链表的头节点 head 返回链表开始入环的第一个节点。 如果链表无环则返回 null。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。如果 pos 是 -1则在该链表中没有环。注意pos 不作为参数进行传递仅仅是为了标识链表的实际情况。
不允许修改 链表。 示例 1 输入head [3,2,0,-4], pos 1
输出返回索引为 1 的链表节点
解释链表中有一个环其尾部连接到第二个节点。示例 2 输入head [1,2], pos 0
输出返回索引为 0 的链表节点
解释链表中有一个环其尾部连接到第一个节点。示例 3 输入head [1], pos -1
输出返回 null
解释链表中没有环。提示
链表中节点的数目范围在范围 [0, 104] 内-105 Node.val 105pos 的值为 -1 或者链表中的一个有效索引 进阶你是否可以使用 O(1) 空间解决此题 解题思路
/**
* 142. 环形链表 II
* 解题思路
* 快慢指针。
* 所以如果有环那么快慢指针一定会相遇否则快指针走到nullptr时代表没有环。
* 如果相遇快指针的速度一定是慢指针的两倍。我们把开始节点距离第一个环节点的长度设置为a第一个环节点到相遇点设置为b环长度-相遇点的长度设置为c。
* 则abn(bc)转换一下a(n-1)(bc)c。所以起点距离第一个环节点的长度就是走N个环c的长度。
* 因此相遇时设置一个指针从头开始走a长度慢指针继续走两者的第一次相遇就是a(n-1)(bc)c。
*/
代码 ListNode *detectCycle(ListNode *head){ListNode *fast head;ListNode *slow head;while (fast ! nullptr){slow slow-next;fast fast-next;if (fast nullptr){return nullptr;}fast fast-next;if (fast slow){break;}}if (fast nullptr){return nullptr;}ListNode *ptr head;while (slow ! ptr){slow slow-next;ptr ptr-next;}return ptr;}