使用完整的C语言做力扣上的第142环形链表
时间: 2024-05-14 10:17:11 浏览: 114
c语言实现链表的操作
好的,以下是使用完整的C语言实现力扣上的第142题环形链表的代码:
```c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
if (head == NULL || head->next == NULL) {
return NULL;
}
struct ListNode *fast = head;
struct ListNode *slow = head;
while (fast != NULL && fast->next != NULL) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
struct ListNode *p = head;
while (p != slow) {
p = p->next;
slow = slow->next;
}
return p;
}
}
return NULL;
}
```
这段代码的思路是使用快慢指针,快指针每次走两步,慢指针每次走一步,如果存在环,那么快指针最终会追上慢指针,此时从头节点和相遇节点同时开始遍历,直到两个指针相遇,那么相遇节点就是环的入口。如果不存在环,那么快指针最终会走到链表尾部,此时返回NULL。
阅读全文