news 2026/5/9 14:20:39

简单链表C语言实现实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单链表C语言实现实例

代码展示

#include <stdio.h> #include <stdlib.h> //定义链表节点结构 struct Node { int data; //节点数据 struct Node* next; //指向下一节点的指针 }; //创建新节点 struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); //为节点分配内存 if(newNode == NULL) { printf("内存分配失败!\n"); return NULL; } newNode->data = data; //设置节点数据 newNode->next = NULL; //设置下一节点指针为空 return newNode; } //在链表末尾添加节点 void appendNode(struct Node** head, int data) { struct Node* newNode = createNode(data); //创建新节点 if(*head == NULL) { *head = newNode; //如果链表为空,将新节点设为头节点 return; } struct Node* current = *head; while(current->next != NULL) { current = current->next; //遍历链表,找到最后一个节点 } current->next = newNode; //将新节点添加到链表末尾 } //在链表开头添加节点 void prependNode(struct Node** head, int data) { struct Node* newNode = createNode(data); //创建新节点 newNode->next = *head; *head = newNode; //将新节点设为头节点 } //删除指定值的节点 void deleteNode(struct Node** head, int data) { if(*head == NULL) { printf("链表为空!\n"); return; } struct Node* current = *head; struct Node* prev = NULL; //如果要删除的是头结点 if(current != NULL && current->data == data) { *head = current->next; free(current); printf("删除成功!\n"); return; } //查找要删除的节点 while(current != NULL && current->data != data) { prev = current; current = current->next; } if(current == NULL) { printf("未找到值为%d的节点!\n",data); return; } //从链表中删除节点 prev->next = current->next; free(current); printf("删除成功!\n"); } //查找节点 struct Node* findNode(struct Node* head, int data) { struct Node* current = head; while(current != NULL) { if(current->data == data) { return current; } current = current->next; } return NULL; } //打印链表 void printList(struct Node* head) { struct Node* current = head; if(current == NULL) { printf("链表为空!\n"); return; } printf("链表内容:"); while(current != NULL) { printf("%d", current->data); if(current->next != NULL) { printf(" -> "); } current = current->next; } printf("\n"); } //计算链表长度 int getLength(struct Node* head) { int length = 0; struct Node* current = head; while(current != NULL) { length++; current = current->next; } return length; } //释放链表内存 void freeList(struct Node** head) { struct Node* current = *head; struct Node* next; while(current != NULL) { next = current->next; free(current); current = next; } *head = NULL; printf("链表已释放!\n"); } //测试链表功能 int main() { struct Node* head = NULL; printf("=== 简单链表实现实例 ===\n\n"); //测试添加节点 printf("1.添加节点 1、2、3、4、5\n"); for(int i=1; i<=5; i++) { appendNode(&head, i); } printList(head); printf("链表长度:%d\n\n", getLength(head)); //测试在开头添加节点 printf("2.在开头添加节点 0\n"); prependNode(&head, 0); printList(head); printf("链表长度:%d\n\n", getLength(head)); //测试查找节点 printf("3.查找节点\n"); int searchValue = 3; struct Node* foundNode = findNode(head, searchValue); if(foundNode != NULL) { printf("找到节点:%d\n\n", foundNode->data); } else { printf("未找到值为:%d 的节点\n\n", searchValue); } //测试删除节点 printf("4.删除节点 3 \n"); deleteNode(&head, 3); printList(head); printf("链表长度:%d\n\n", getLength(head)); printf("5.删除节点 0 \n"); deleteNode(&head, 0); printList(head); printf("链表长度:%d\n\n", getLength(head)); //测试删除不存在的节点 printf("6.删除不存在的节点 99 \n"); deleteNode(&head, 99); printList(head); //释放链表 freeList(&head); return 0; }

运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 12:09:58

Windows右键菜单优化神器:ContextMenuManager让你的桌面操作效率翻倍

Windows右键菜单优化神器&#xff1a;ContextMenuManager让你的桌面操作效率翻倍 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为右键菜单中那些永远用不到…

作者头像 李华
网站建设 2026/5/2 22:06:48

空洞骑士Scarab模组管理器:从新手到专家的完全指南

空洞骑士Scarab模组管理器&#xff1a;从新手到专家的完全指南 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为《空洞骑士》模组安装的繁琐流程而头疼吗&#xff1f;Sca…

作者头像 李华
网站建设 2026/5/7 14:57:06

数字频率计的LCD显示接口实现:完整示例代码解析

数字频率计的LCD显示&#xff1a;从测量到可视化的完整实现在嵌入式测量系统中&#xff0c;能“测”固然重要&#xff0c;但让用户真正“看见”结果&#xff0c;才是产品落地的关键。数字频率计作为基础电子仪器&#xff0c;其核心任务是精确捕捉输入信号的频率值——但这只是第…

作者头像 李华
网站建设 2026/5/2 18:24:19

3、软件需求收集:传统方法问题与用例的崛起

软件需求收集:传统方法问题与用例的崛起 在软件开发过程中,需求收集是至关重要的一环。然而,传统的需求收集方法存在诸多问题,难以满足现代软件开发的需求。本文将探讨常见的标准需求收集方法存在的问题,并介绍用例这一新兴工具在需求收集中的优势。 标准方法存在的问题…

作者头像 李华
网站建设 2026/5/9 13:34:53

9、软件开发项目管理:从瀑布模型到迭代增量模型的探索

软件开发项目管理:从瀑布模型到迭代增量模型的探索 1. 聚焦迭代的交付物与角色 1.1 聚焦迭代的交付物 聚焦迭代的交付物涵盖多个方面,具体情况如下: | 交付物 | 完成状态 | | — | — | | 问题陈述 | 已完成 | | 工作说明 | 已完成 | | 用例 | 聚焦级别 | | 用例图…

作者头像 李华
网站建设 2026/4/24 16:29:24

LCD12864在STM32上的应用项目实例

如何让一块老古董LCD屏在STM32上焕发新生&#xff1f;——深入剖析LCD12864实战驱动你有没有遇到过这样的场景&#xff1a;项目预算卡得死死的&#xff0c;客户却要求“能显示汉字、还能画点图形”&#xff1b;或者你在做一个工业仪表&#xff0c;不需要炫酷界面&#xff0c;只…

作者头像 李华