用C语言写出创建循环链表并且设置第六位为起始点环长为10
时间: 2024-09-26 07:17:42 浏览: 28
在C语言中,我们可以使用结构体来表示链表节点,并通过头指针管理链表。为了创建一个有环的链表,我们需要在某个特定位置插入一个新的节点并将其next指向自身,形成环。这里是一个简单的例子,展示如何创建一个包含6个节点的循环链表,其中第6个节点作为起始点,环长为10:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 设置环形链表
void setCycle(Node** head, Node* sixthNode, int cycleLength) {
// 先计算第六个节点的位置
int position = 0;
Node* current = *head;
while (position != 5) {
current = current->next;
position++;
}
// 将第六个节点的next指向前六个节点,形成环
current->next = sixthNode;
// 从第六个节点开始向后遍历,设置剩余部分的环长
for (int i = 0; i < cycleLength - 1; i++) {
current = sixthNode;
for (int j = 0; j < cycleLength - 1 - i; j++) {
current = current->next;
}
current->next = sixthNode->next;
}
}
// 测试函数
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
// 初始化链表
Node* head = createNode(1); // 第一个节点
Node* second = createNode(2);
Node* third = createNode(3);
Node* fourth = createNode(4);
Node* fifth = createNode(5);
// 连接节点形成链表
head->next = second;
second->next = third;
third->next = fourth;
fourth->next = fifth;
fifth->next = head; // 设置环
// 将第六个节点设为环起点
Node* sixthNode = fourth;
setCycle(&head, sixthNode, 10); // 环长为10
// 打印链表
printf("Original list with cycle:\n");
printList(head);
return 0;
}
```
阅读全文