循环链表实现
循环链表的最后一个节点指向头节点,形成一个环。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next; // 指向下一个节点
} Node;
typedef struct {
Node *head; // 头指针
} CircularLinkedList;
// 初始化循环链表
void initList(CircularLinkedList *list) {
list->head = NULL;
}
// 插入节点
void insert(CircularLinkedList *list, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
if (list->head == NULL) {
list->head = newNode;
newNode->next = newNode; // 指向自身
} else {
Node *tail = list->head;
while (tail->next != list->head) {
tail = tail->next;
}
tail->next = newNode;
newNode->next = list->head;
}
}
// 打印链表
void printList(CircularLinkedList *list) {
if (list->head == NULL) return;
Node *current = list->head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != list->head);
printf("\n");
}
// 释放链表
void freeList(CircularLinkedList *list) {
if (list->head == NULL) return;
Node *current = list->head;
Node *temp;
do {
temp = current;
current = current->next;
free(temp);
} while (current != list->head);
list->head = NULL;
}
int main() {
CircularLinkedList list;
initList(&list);
insert(&list, 10);
insert(&list, 20);
insert(&list, 30);
printList(&list);
freeList(&list);
return 0;
}