用c语言给我编写一个程序内容为 建立单链表,并在单链表上实现插入、删除和查找操作的程序
时间: 2023-05-31 13:07:47 浏览: 94
好的,我可以为您编写一个基于C语言的单链表实现的程序。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 定义一个函数以创建一个新的节点并返回指针
ListNode* create_node(int val) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 定义一个函数以在链表尾部添加节点
void insert_node(ListNode *head, int val) {
ListNode *curr = head;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = create_node(val);
}
// 定义一个函数以从链表中删除节点
void delete_node(ListNode *head, int val) {
ListNode *prev = NULL, *curr = head;
while (curr != NULL && curr->val != val) {
prev = curr;
curr = curr->next;
}
if (curr != NULL) {
prev->next = curr->next;
free(curr);
}
}
// 定义一个函数以在链表中查找节点
ListNode* search_node(ListNode *head, int val) {
ListNode *curr = head;
while (curr != NULL && curr->val != val) {
curr = curr->next;
}
return curr;
}
// 定义一个函数以打印整个链表
void print_list(ListNode *head) {
ListNode *curr = head;
while (curr != NULL) {
printf("%d -> ", curr->val);
curr = curr->next;
}
printf("NULL\n");
}
int main() {
// 创建一个头节点
ListNode *head = create_node(0);
// 在链表上插入节点
insert_node(head, 1);
insert_node(head, 2);
printf("After insertion: ");
print_list(head);
// 从链表中删除节点
delete_node(head, 1);
printf("After deletion: ");
print_list(head);
// 在链表中查找节点
ListNode *node = search_node(head, 2);
if (node != NULL) {
printf("Found %d in the list.\n", node->val);
} else {
printf("Node not found.\n");
}
// 释放链表内存
ListNode *curr = head, *prev;
while (curr != NULL) {
prev = curr;
curr = curr->next;
free(prev);
}
return 0;
}
```
上面的代码实现了单链表的基本操作,包括输入、删除和搜索节点,并输出整个链表。您可以在代码中添加自己的实现以满足您的要求。
阅读全文