环形链表
环形链表是一种链表数据结构,与普通链表最大的不同点是它的尾节点指向头节点,形成一个环形结构。
环形链表有两种实现方式:单向环形链表和双向环形链表。单向环形链表的每个节点只有一个指向后继节点的指针,而双向环形链表的每个节点则有一个指向前驱节点和一个指向后继节点的指针。
以下是一个用C语言实现单向环形链表的示例代码:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 在链表尾部添加节点
void append(Node** headRef, int newData) {
Node* newNode = (Node*)malloc(sizeof(Node));
Node* tail = *headRef;
newNode->data = newData;
newNode->next = *headRef;
if (*headRef == NULL) {
*headRef = newNode;
return;
}
while (tail->next != *headRef) {
tail = tail->next;
}
tail->next = newNode;
return;
}
// 遍历并打印链表中的所有节点
void printList(Node* head) {
Node* current = head;
if (head == NULL) {
printf("链表为空\n");
return;
}
printf("链表节点:\n");
do {
printf("%d ", current->data);
current = current->next;
} while (current != head);
printf("\n");
}
int main() {
Node* head = NULL;
append(&head, 1);
append(&head, 2);
append(&head, 3);
append(&head, 4);
printList(head);
return 0;
}
以上代码实现了一个简单的单向环形链表,可以通过append函数在链表尾部添加节点,通过printList函数遍历并打印链表中的所有节点。在main函数中调用了这两个函数来演示单向环形链表的使用。