142. 环形链表 II 难度:中等
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
说明:为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
代码如下:
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode *slow = head;
struct ListNode *fast = head;
while (fast != NULL && slow != NULL) {
slow = slow->next;
fast = fast->next;
if (fast == NULL) {
return NULL;
}
fast = fast->next;
if (slow == fast) {
break;
}
}
if (slow != fast) {
return NULL;
}
slow = head;
while (fast != NULL && slow != NULL && fast != slow) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
提交结果如下:

本文介绍了一种用于检测链表中环的高效算法。通过快慢指针技巧,算法能在O(n)时间内找到链表开始入环的第一个节点。文章提供了完整的C语言实现代码,并详细解释了其工作原理。

304

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



