C语言中如何判断链表是否是环形,请举例
时间: 2024-02-15 16:01:48 浏览: 69
判断单链表中是否存在环
判断链表是否是环形,可以通过遍历链表并使用一个指针来判断是否有重复节点的方式来实现。具体做法是,定义一个指针p,初始时指向链表的头节点,然后遍历链表,每遍历一个节点就将p指针后移一位,并判断p指针指向的节点是否已经遍历过。如果p指针指向的节点已经遍历过了,说明链表是环形的;否则,如果p指针到达了链表的尾部,那么说明链表不是环形的。
下面是一个示例代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
bool isCircular(struct ListNode *head) {
if (head == NULL) {
return false;
}
struct ListNode *p = head;
while (p != NULL) {
if (p->val == INT_MAX) {
return true;
}
p->val = INT_MAX;
p = p->next;
}
return false;
}
```
在这个示例代码中,我们使用了一个指针p,它初始指向链表的头节点。在while循环中,我们每遍历一个节点就将p指针后移一位,并将当前节点的值设置为INT_MAX。如果p指针指向的节点的值已经是INT_MAX了,说明该节点已经遍历过了,这时我们就可以返回true了。如果p指针到达了链表的尾部,那么说明链表不是环形的,我们就可以返回false了。
阅读全文