单链表的增删改查c
时间: 2023-07-19 20:18:28 浏览: 88
C语言实现单链表-增删改查.pdf
好的,以下是单链表的增删改查的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
// 创建单链表
struct Node* createLinkedList() {
struct Node *head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
return head;
}
// 插入节点
void insertNode(struct Node *head, int data, int index) {
struct Node *node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->next = NULL;
struct Node *p = head;
for (int i = 0; i < index && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
printf("插入位置无效\n");
return;
}
node->next = p->next;
p->next = node;
}
// 删除节点
void deleteNode(struct Node *head, int index) {
struct Node *p = head;
for (int i = 0; i < index && p != NULL; i++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
printf("删除位置无效\n");
return;
}
struct Node *temp = p->next;
p->next = temp->next;
free(temp);
}
// 修改节点
void updateNode(struct Node *head, int data, int index) {
struct Node *p = head->next;
for (int i = 0; i < index && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
printf("修改位置无效\n");
return;
}
p->data = data;
}
// 查找节点
void findNode(struct Node *head, int data) {
struct Node *p = head->next;
int index = 0;
while (p != NULL) {
if (p->data == data) {
printf("节点 %d 包含数据 %d\n", index, data);
return;
}
p = p->next;
index++;
}
printf("未找到数据 %d\n", data);
}
// 打印单链表
void printLinkedList(struct Node *head) {
struct Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
struct Node *head = createLinkedList();
// 插入节点
insertNode(head, 1, 0);
insertNode(head, 2, 1);
insertNode(head, 4, 2);
insertNode(head, 3, 2);
// 打印单链表
printf("单链表:");
printLinkedList(head);
// 删除节点
deleteNode(head, 2);
// 打印单链表
printf("删除后的单链表:");
printLinkedList(head);
// 修改节点
updateNode(head, 5, 2);
// 打印单链表
printf("修改后的单链表:");
printLinkedList(head);
// 查找节点
findNode(head, 3);
findNode(head, 6);
return 0;
}
```
希望这个代码能够帮助到你。如果你有任何问题或疑问,欢迎随时问我。
阅读全文