数据结构-单链表回环函数判断
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define size 4 int swap(int source[], int a, int b) { int temp; temp = source[a]; source[a] = source[b]; source[b] = temp; return 0; } typedef struct node { int data; struct node *next; }linklist; linklist *creatlist(int n) { linklist *p, *head, *q; int i; head = (linklist *)malloc(sizeof(linklist)); head->data = 1; q = head; for (i = 2; i <= n; i++) { p = (linklist *)malloc(sizeof(linklist)); p->data = i; q->next = p; q = p; } q->next = NULL; return head; } linklist *judge(linklist *head) { if (head == NULL | head->next == NULL) { return 0; } linklist *p, *q; p = head->next; q = head->next->next; while (q && q->next && p != q) { p = p->next; q = q->next->next; } if (p == q) { printf("this is a 回环链表 \n"); } else printf("this is not 回环链表 \n"); return 0; } int main() { linklist *head, *now; head = creatlist(8); now = head; int i; for (i = 0; i < 8; i++) { printf("%d ", now->data); now = now->next; } printf("\n"); now = head; judge(now); }