C语言中如何判断链表是否有环请举例
时间: 2024-02-15 07:01:47 浏览: 91
判断单链表中是否存在环
可以使用快慢指针的方法来判断链表是否有环。具体做法是,定义两个指针slow和fast,初始时都指向链表的头节点。slow每次移动一个节点,fast每次移动两个节点,如果链表中有环,那么fast指针一定会追上slow指针。如果fast指针追上slow指针了,那么说明链表中有环;否则,如果fast指针到达了链表的尾部,那么说明链表中没有环。
下面是一个示例代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
bool hasCycle(struct ListNode *head) {
if (head == NULL) {
return false;
}
struct ListNode *slow = head;
struct ListNode *fast = head;
while (fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
return true;
}
}
return false;
}
```
在这个示例代码中,我们使用了两个指针slow和fast,它们都初始指向链表的头节点。在while循环中,我们每次将slow指针移动一个节点,将fast指针移动两个节点。如果链表中有环,那么fast指针一定会追上slow指针,这时我们就可以返回true了。如果fast指针到达了链表的尾部,那么说明链表中没有环,我们就可以返回false了。
阅读全文