帮我用C语言写一个单链表要具有,初始化,显示长度,插入,查找,删除,遍历输出的功能
时间: 2024-05-19 12:13:19 浏览: 62
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 初始化单链表
ListNode *initList() {
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
head->next = NULL;
return head;
}
// 获取单链表长度
int getListLength(ListNode *head) {
int count = 0;
ListNode *p = head->next;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
// 插入节点
void insertNode(ListNode *head, int index, int data) {
int i = 0;
ListNode *p = head;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (p == NULL || i > index) {
printf("插入位置无效\n");
return;
}
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
// 查找节点
ListNode *findNode(ListNode *head, int data) {
ListNode *p = head->next;
while (p != NULL && p->data != data) {
p = p->next;
}
return p;
}
// 删除节点
void deleteNode(ListNode *head, int data) {
ListNode *p = head;
while (p->next != NULL && p->next->data != data) {
p = p->next;
}
if (p->next == NULL) {
printf("要删除的节点不存在\n");
return;
}
ListNode *q = p->next;
p->next = q->next;
free(q);
}
// 遍历输出单链表
void traverseList(ListNode *head) {
ListNode *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 初始化单链表
ListNode *head = initList();
// 插入节点
insertNode(head, 0, 1);
insertNode(head, 1, 2);
insertNode(head, 2, 3);
insertNode(head, 3, 4);
// 显示单链表长度
printf("单链表长度为:%d\n", getListLength(head));
// 查找节点
ListNode *node = findNode(head, 3);
if (node != NULL) {
printf("查找到节点,节点值为:%d\n", node->data);
} else {
printf("未找到节点\n");
}
// 删除节点
deleteNode(head, 3);
// 遍历输出单链表
traverseList(head);
// 释放单链表内存
ListNode *p = head;
while (p != NULL) {
ListNode *q = p;
p = p->next;
free(q);
}
return 0;
}
阅读全文