写一段C代码关于创建一个由6个结点的单向链表,实现结点移动功能。
时间: 2023-06-08 16:04:55 浏览: 93
好的,请看下面的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个链表节点
typedef struct ListNode {
int value;
struct ListNode* next;
} ListNode;
// 创建6个节点的链表
ListNode* createList() {
ListNode* head = malloc(sizeof(ListNode));
head->value = 1;
head->next = NULL;
ListNode* cur = head;
for (int i = 2; i <= 6; ++i) {
ListNode* node = malloc(sizeof(ListNode));
node->value = i;
node->next = NULL;
cur->next = node;
cur = node;
}
return head;
}
// 输出链表
void printList(ListNode* head) {
ListNode* cur = head;
while (cur != NULL) {
printf("%d ", cur->value);
cur = cur->next;
}
printf("\n");
}
// 实现结点移动功能
void moveNode(ListNode* head, int index) {
if (index < 1 || index > 5) {
printf("索引非法!\n");
return;
}
ListNode* cur = head;
for (int i = 1; i < index; ++i) {
cur = cur->next;
}
ListNode* tmp = cur->next;
cur->next = tmp->next;
tmp->next = head->next;
head->next = tmp;
}
int main() {
// 创建链表
ListNode* head = createList();
// 输出原始链表
printf("原始链表:");
printList(head);
// 移动节点
moveNode(head, 3);
// 输出移动后的链表
printf("移动后链表:");
printList(head);
// 释放链表内存
ListNode* cur = head;
while (cur != NULL) {
ListNode* tmp = cur;
cur = cur->next;
free(tmp);
}
return 0;
}
```
这段代码通过 `createList` 函数创建了一个包含6个节点的单向链表,再通过 `moveNode` 函数实现了在指定位置的节点向头部移动的功能,最后通过 `printList` 函数和 `main` 函数输出链表的内容并释放链表内存。
阅读全文