标签:遇到 初始化 val fast ash 就会 指针 两种 ini
题目链接 142. 环形链表 II
本题的解法主要是两种,都是在141题判断是否有环的基础上进行的
在141中已经知道快慢指针会在环中相遇,入下图:
在环上相遇后,记录第一次相遇点为Pos,连接点为Join,假设头结点到连接点的长度为LenA,连接点到第一次相遇点的长度为x,环长为R。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
if (!head || !head->next) {
return NULL;
}
//这里要注意,初始化时,慢指针指向头指针的下一个节点,快指针指向头指针后两个节点的位置
//如果慢指针初始为head,快指针初始为head->next,虽然能找到一个碰撞点,但是后面找环入口节点的时候就会有问题,无法遇到,进入死循环
struct ListNode *slow = head->next, *fast = head->next->next;
while (slow != fast) {
if (!fast || !fast->next) {
return NULL;
}
slow = slow->next;
fast = fast->next->next;
}
slow = head;
int pos = 0;
while (slow != fast) {
pos++;
slow = slow->next;
fast = fast->next;
}
return fast;
}
标签:遇到 初始化 val fast ash 就会 指针 两种 ini
原文地址:https://www.cnblogs.com/xiaoshuai666/p/11391915.html