数据结构c语言实现 带有头节点单链表的创建插入删除查找功能
时间: 2023-08-15 21:03:44 浏览: 77
C语言实现单向链表的创建、插入,删除节点,和2个链表合并
5星 · 资源好评率100%
以下是带有头节点单链表的创建、插入、删除、查找的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建一个带有头节点的空链表,并返回头节点指针
ListNode *createList() {
ListNode *head = (ListNode *) malloc(sizeof(ListNode));
head->next = NULL;
return head;
}
// 在链表尾部插入一个值为val的新节点
void insert(ListNode *head, int val) {
ListNode *newNode = (ListNode *) malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
ListNode *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 在链表中删除第一个值为val的节点
void delete(ListNode *head, int val) {
ListNode *prev = head;
ListNode *curr = head->next;
while (curr != NULL && curr->val != val) {
prev = curr;
curr = curr->next;
}
if (curr != NULL) {
prev->next = curr->next;
free(curr);
}
}
// 在链表中查找第一个值为val的节点,并返回该节点指针
ListNode *search(ListNode *head, int val) {
ListNode *p = head->next;
while (p != NULL && p->val != val) {
p = p->next;
}
return p;
}
int main() {
ListNode *head = createList();
// 插入节点
insert(head, 1);
insert(head, 2);
insert(head, 3);
// 查找节点
ListNode *p = search(head, 2);
if (p != NULL) {
printf("Found node with value %d\n", p->val);
} else {
printf("Node not found\n");
}
// 删除节点
delete(head, 2);
// 再次查找节点
p = search(head, 2);
if (p != NULL) {
printf("Found node with value %d\n", p->val);
} else {
printf("Node not found\n");
}
return 0;
}
```
这里的代码示例中,我们定义了一个链表节点结构体 `ListNode`,包含一个整数值 `val` 和一个指向下一个节点的指针 `next`。我们使用 `createList` 函数创建一个带有头节点的空链表,并返回头节点指针。使用 `insert` 函数在链表尾部插入一个新节点,使用 `delete` 函数删除第一个值为 `val` 的节点,使用 `search` 函数查找第一个值为 `val` 的节点,并返回该节点的指针。在主函数中,我们通过插入、查找、删除节点来演示链表的基本操作。
阅读全文