c语言编写动态链表的代码
时间: 2023-02-06 13:08:42 浏览: 54
好的,下面是用 C 语言实现动态链表的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建新节点
Node* create_node(int data) {
Node* new_node = (Node*) malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 在链表的头部插入新节点
void insert_at_head(Node** head, int data) {
Node* new_node = create_node(data);
new_node->next = *head;
*head = new_node;
}
// 在链表的尾部插入新节点
void insert_at_tail(Node** head, int data) {
Node* new_node = create_node(data);
if (*head == NULL) {
*head = new_node;
return;
}
Node* cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
// 在指定位置插入新节点
void insert_at_index(Node** head, int data, int index) {
if (*head == NULL || index == 0) {
insert_at_head(head, data);
return;
}
Node* cur = *head;
int cur_index = 0;
while (cur->next != NULL && cur_index < index - 1) {
cur = cur->next;
cur_index++;
}
if (cur_index == index - 1) {
Node* new_node = create_node(data);
new_node->next = cur->next;
cur->next = new_node;
} else {
printf("Index out of bounds.\n");
}
}
// 删除头节点
void delete_at_head(Node** head) {
if (*head == NULL) {
return;
}
Node* temp = *head;
*head = (*head)->next;
free(temp);
}
// 删除尾节点
void delete_at_tail(Node** head) {
if (*head == NULL) {
return;
}
if ((*head)->next == NULL) {
free(*head);
*head = NULL;
return;
}
Node* cur = *head;
while (cur->next->next != NULL) {
cur = cur->next