Table of contents
the code
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct ListNode {
int val;
struct ListNode *next;
};
bool hasCycle(struct ListNode *head) {
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;
}
int main() {
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p1 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p2 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p3 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p4 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p5 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *p6 = (struct ListNode *)malloc(sizeof(struct ListNode));
head->val = 1;
head->next = p1;
p1->val = 2;
p1->next = p2;
p2->val = 3;
p2->next = p3;
p3->val = 4;
p3->next = p4;
p4->val = 5;
p4->next = p5;
p5->val = 6;
p5->next = p6;
p6->val = 7;
p6->next = p3;
bool has_cycle = hasCycle(head);
printf("%s\n", has_cycle ? "链表成环" : "链表无环");
free(head);
free(p1);
free(p2);
free(p3);
free(p4);
free(p5);
free(p6);
return 0;
}