链表节点移动操作的C语言代码
时间: 2023-06-07 15:06:54 浏览: 70
以下是链表节点移动操作的C语言代码:
```c
// 头文件
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct node {
int data;
struct node *next;
} Node;
// 定义链表头节点
typedef struct {
Node *head;
} List;
// 初始化链表
void init(List *list) {
list->head = NULL;
}
// 添加节点到链表末尾
void append(List *list, int data) {
Node *node = (Node*) malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (list->head == NULL) {
list->head = node;
} else {
Node *temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = node;
}
}
// 删除节点
void remove_node(List *list, int data) {
Node *temp = list->head;
Node *prev = NULL;
while (temp != NULL) {
if (temp->data == data) {
if (prev == NULL) {
list->head = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
break;
} else {
prev = temp;
temp = temp->next;
}
}
}
// 移动节点
void move_node(List *list, int data, int distance) {
Node *temp = list->head;
Node *prev = NULL;
while (temp != NULL) {
if (temp->data == data) {
if (prev == NULL) {
list->head = temp->next;
temp->next = list->head;
list->head = temp;
} else {
prev->next = temp->next;
temp->next = prev->next;
prev->next = temp;
}
for (int i = 0; i < distance; i++) {
if (temp->next == NULL) {
break;
}
Node *next = temp->next;
temp->next = next->next;
next->next = temp;
prev->next = next;
prev = next;
}
break;
} else {
prev = temp;
temp = temp->next;
}
}
}
// 输出链表
void print_list(List *list) {
Node *temp = list->head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 测试函数
int main() {
List list;
init(&list);
append(&list, 1);
append(&list, 2);
append(&list, 3);
append(&list, 4);
append(&list, 5);
printf("原链表:");
print_list(&list);
move_node(&list, 3, 2);
printf("移动节点后的链表:");
print_list(&list);
return 0;
}
```
注意:此代码仅供参考,具体实现可能需要根据实际情况进行修改。