用c语言写单链表的各种操作
时间: 2023-06-11 08:08:15 浏览: 50
以下是用 C 语言实现单链表的各种操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data; // 数据
struct Node *next; // 指向下一个节点的指针
} Node;
// 初始化链表
void initList(Node **head) {
*head = NULL;
}
// 插入节点
void insertNode(Node **head, int data, int pos) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
if (pos == 0) {
newNode->next = *head;
*head = newNode;
return;
}
Node *current = *head;
int i = 0;
while (i < pos - 1 && current->next != NULL) {
current = current->next;
i++;
}
newNode->next = current->next;
current->next = newNode;
}
// 删除节点
void deleteNode(Node **head, int pos) {
if (*head == NULL) {
return;
}
Node *current = *head;
if (pos == 0) {
*head = current->next;
free(current);
return;
}
int i = 0;
while (i < pos - 1 && current->next != NULL) {
current = current->next;
i++;
}
if (current->next == NULL) {
return;
}
Node *toBeDeleted = current->next;
current->next = toBeDeleted->next;
free(toBeDeleted);
}
// 查找节点
Node *searchNode(Node *head, int data) {
Node *current = head;
while (current != NULL) {
if (current->data == data) {
return current;
}
current = current->next;
}
return NULL;
}
// 修改节点
void modifyNode(Node *node, int data) {
if (node == NULL) {
return;
}
node->data = data;
}
// 遍历链表
void traverseList(Node *head) {
Node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Node *head;
initList(&head);
// 插入节点
insertNode(&head, 1, 0);
insertNode(&head, 2, 1);
insertNode(&head, 3, 2);
insertNode(&head, 4, 3);
// 遍历链表
traverseList(head);
// 删除节点
deleteNode(&head, 2);
// 遍历链表
traverseList(head);
// 查找节点
Node *node = searchNode(head, 2);
if (node != NULL) {
printf("Found node %d\n", node->data);
} else {
printf("Node not found\n");
}
// 修改节点
modifyNode(head->next, 5);
// 遍历链表
traverseList(head);
return 0;
}
```
这段代码中包含了单链表的初始化、插入节点、删除节点、查找节点、修改节点和遍历链表等操作。可以通过调用相应的函数来进行链表操作。