用c++编写一个环形链表
时间: 2023-09-18 17:07:18 浏览: 85
以下是使用C语言编写环形链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
//定义结点结构体
struct Node {
int data;
struct Node* next;
};
//创建新结点
struct Node* createNode(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
//在链表末尾添加结点
void addNode(struct Node** head, int value) {
struct Node* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
(*head)->next = *head;
}
else {
struct Node* temp = *head;
while (temp->next != *head) {
temp = temp->next;
}
temp->next = newNode;
newNode->next = *head;
}
}
//遍历链表
void traverseList(struct Node* head) {
if (head == NULL) {
printf("List is empty.\n");
}
else {
struct Node* temp = head;
do {
printf("%d ", temp->data);
temp = temp->next;
} while (temp != head);
printf("\n");
}
}
int main() {
struct Node* head = NULL;
addNode(&head, 1);
addNode(&head, 2);
addNode(&head, 3);
addNode(&head, 4);
addNode(&head, 5);
traverseList(head);
return 0;
}
```
在这个程序中,我们使用了一个指向结点的指针作为环形链表的头部。我们还定义了一个结点结构体,其中包含了一个整型数据和一个指向下一个结点的指针。我们创建新结点的函数使用malloc()函数为新结点分配内存,并将结点的数据和指针初始化。我们在链表末尾添加结点的函数使用while循环找到最后一个结点,然后将新结点添加到其next指针上。最后,我们使用do-while循环遍历链表并输出每个结点的数据。
阅读全文