请用C语言实现,建立一个单链表并能够对该单链表进行增加,删除,修改,查询的操作,并具体解释代码
时间: 2024-09-22 19:06:59 浏览: 22
在C语言中,我们可以创建一个简单的单链表结构来存储节点,并提供增加、删除、修改和查询操作。首先,我们需要定义链表节点和相关的头结点。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表
Node* createList() {
return (Node*)malloc(sizeof(Node));
}
// 在链表末尾添加节点
void append(Node** head, int value) {
if (*head == NULL) {
*head = createList();
(*head)->data = value;
(*head)->next = NULL;
} else {
Node* newNode = createList();
newNode->data = value;
newNode->next = NULL;
Node* temp = *head;
while (temp->next != NULL)
temp = temp->next;
temp->next = newNode;
}
}
// 删除指定值的节点
void deleteNode(Node** head, int value) {
if (*head == NULL)
return;
// 如果头结点就是要删除的节点
if ((*head)->data == value) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
}
}
// 修改节点值
void modifyNode(Node** head, int oldVal, int newVal) {
Node* temp = *head;
while (temp != NULL && temp->data != oldVal) {
temp = temp->next;
}
if (temp != NULL) {
temp->data = newVal;
}
}
// 查询节点是否存在
int searchNode(Node* head, int value) {
Node* current = head;
while (current != NULL) {
if (current->data == value)
return 1; // 返回1表示找到,0表示未找到
current = current->next;
}
return 0;
}
int main() {
Node* head = NULL;
// 示例操作
append(&head, 5);
append(&head, 10);
printf("After appending: ");
printList(head); // 自定义函数,用于打印链表
modifyNode(&head, 5, 7);
printf("\nAfter modifying node: ");
printList(head);
if (searchNode(head, 10))
printf("\nFound node with value 10.\n");
else
printf("\nNode with value 10 not found.\n");
deleteNode(&head, 10);
printf("\nAfter deleting node: ");
printList(head);
return 0;
}
```
在这个示例中,`createList()` 函数用于初始化一个新的节点,`append()` 和 `deleteNode()` 分别负责在链表尾部和指定位置插入或删除节点,`modifyNode()` 负责更改节点值,`searchNode()` 则检查特定值是否存在于链表中。`printList()` 是一个辅助函数,用于打印链表的内容,这里假设已存在。