链接:142. 环形链表 II - 力扣(LeetCode)
解决思路:
1.快慢指针从头节点开始走,会在环内交于一点。
2.头节点和相交点同时开始走,最后会交于入口点。

代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
int sign = 0;
struct ListNode *slow = head;
struct ListNode *fast = head;
while(fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if(fast == slow) {
sign = 1;
break;
}
}
if(sign) {
while(1) {
if(head == fast) {
return fast;
}
head = head->next;
fast = fast->next;
}
} else {
return NULL;
}
}
1759

被折叠的 条评论
为什么被折叠?



