帮我写一个用C语言实现的循环链表
时间: 2023-03-19 09:25:16 浏览: 62
好的,以下是一个简单的用C语言实现的循环链表代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createNode(int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertAtBeginning(Node **head, int data) {
Node *newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
newNode->next = *head;
}
else {
Node *temp = *head;
while (temp->next != *head) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = *head;
*head = newNode;
}
}
void insertAtEnd(Node **head, int data) {
Node *newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
newNode->next = *head;
}
else {
Node *temp = *head;
while (temp->next != *head) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = *head;
}
}
void deleteAtBeginning(Node **head) {
if (*head == NULL) {
printf("List is empty\n");
return;
}
else if ((*head)->next == *head) {
free(*head);
*head = NULL;
}
else {
Node *temp = *head;
while (temp->next != *head) {
temp = temp->next;
}
temp->next = (*head)->next;
Node *toDelete = *head;
*head = (*head)->next;
free(toDelete);
}
}
void deleteAtEnd(Node **head) {
if (*head == NULL) {
printf("List is empty\n");
return;
}
else if ((*head)->next == *head) {
free(*head);
*head = NULL;
}
else {
Node *temp = *head;
while (temp->next->next != *head) {
temp = temp->next;
}
Node *toDelete = temp->next;
temp->next = *head;
free(toDelete);
}
}
void printList(Node *head) {
if (head == NULL) {
printf("List is empty\n");
return;
}
Node *temp = head;
do {
printf("%d ", temp->data);
temp = temp->next;
} while (temp != head);
printf("\n");
}
int main() {
Node *head = NULL;
insertAtBeginning(&head, 1);
insertAtEnd(&head, 2);
insertAtEnd(&head, 3);
printList(head);
deleteAtBeginning(&head);
deleteAtEnd(&head);
printList(head);
return 0;
}
```
这个循环链表实现了四个基本操作:在链表开头插入节点、在链表末尾插入节点、在链表开头删除节点、在链表末尾删除节点,并且可以打印整个链表的节点数据。其中,节点的数据类型为整数。在这个实现中,循环链表是通过节点指针的