用c语言1. 建立单链表,并在单链表上实现插入、删除和查找操作
时间: 2024-05-12 17:14:04 浏览: 113
下面是用C语言实现单链表,并实现插入、删除和查找操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建新节点
ListNode* createNode(int val) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 插入节点
void insertNode(ListNode *head, int val) {
ListNode *node = createNode(val);
while (head->next != NULL) {
head = head->next;
}
head->next = node;
}
// 删除节点
void deleteNode(ListNode *head, int val) {
while (head->next != NULL) {
if (head->next->val == val) {
ListNode *temp = head->next;
head->next = head->next->next;
free(temp);
return;
}
head = head->next;
}
}
// 查找节点
ListNode* findNode(ListNode *head, int val) {
while (head->next != NULL) {
if (head->next->val == val) {
return head->next;
}
head = head->next;
}
return NULL;
}
// 打印链表
void printList(ListNode *head) {
while (head->next != NULL) {
printf("%d ", head->next->val);
head = head->next;
}
printf("\n");
}
int main() {
// 创建链表头节点
ListNode *head = createNode(0);
// 插入节点
insertNode(head, 1);
insertNode(head, 2);
insertNode(head, 3);
// 打印链表
printf("链表:");
printList(head);
// 查找节点
ListNode *node = findNode(head, 2);
if (node != NULL) {
printf("查找节点值为2的节点成功\n");
} else {
printf("查找节点值为2的节点失败\n");
}
// 删除节点
deleteNode(head, 2);
printf("删除节点后的链表:");
printList(head);
return 0;
}
```
该代码中,`ListNode`表示单链表中的一个节点,包含一个整数`val`和一个指向下一个节点的指针`next`。`createNode`函数用于创建一个新节点,`insertNode`函数用于在链表尾部插入一个节点,`deleteNode`函数用于删除链表中值为给定值的第一个节点,`findNode`函数用于查找链表中值为给定值的第一个节点,`printList`函数用于打印整个链表。在主函数中,首先创建链表头节点,然后插入节点,打印链表,查找节点,删除节点,最后打印删除节点后的链表。
阅读全文