news 2026/8/16 10:59:02

简单链表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/8/12 23:20:29

openmv与stm32通信实战案例:基于UART的稳定连接实现

OpenMV与STM32通信实战&#xff1a;构建稳定高效的视觉-控制链路 在一次智能搬运小车的开发中&#xff0c;我遇到了这样一个问题&#xff1a;摄像头能准确识别目标颜色块&#xff0c;但小车总是“反应迟钝”&#xff0c;甚至偶尔失控转向。排查后发现&#xff0c; 不是算法不准…

作者头像 李华
网站建设 2026/8/8 17:32:31

GHelper终极指南:华硕笔记本硬件控制的完整解决方案

GHelper终极指南&#xff1a;华硕笔记本硬件控制的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址:…

作者头像 李华
网站建设 2026/8/9 19:29:41

14、房地产管理系统的需求分析与用例设计

房地产管理系统的需求分析与用例设计 1. 系统概述 在房地产投资管理中,投资者会将一定比例的资产分配到房地产领域,如购买或建造购物中心、办公楼等商业地产。为了更好地管理这些资产,减少对电子表格的依赖,需要一个自动化系统来记录和报告投资情况。该系统的主要功能包括…

作者头像 李华
网站建设 2026/8/9 5:52:21

GPT-SoVITS API 接口开发指南:轻松集成到你的系统

GPT-SoVITS API 接口开发实战&#xff1a;如何将少样本语音克隆无缝集成到你的系统 在虚拟主播直播间里&#xff0c;观众听到的“主播”声音其实来自AI&#xff1b;有声书平台上的百变声线&#xff0c;背后是几分钟录音训练出的个性化模型&#xff1b;智能客服系统能用你熟悉的…

作者头像 李华
网站建设 2026/8/10 18:49:19

13、优化器:提升训练效率的关键

优化器:提升训练效率的关键 动态学习率衰减与初始学习率 在使用动态学习率衰减时,通常一个不错的做法是,选择一个比平常更大的初始学习率 γ0。由于 γ 会逐渐减小,这样一般不会产生问题,并且有望加快初始阶段的收敛速度。不过,并没有固定的规则表明哪种方法效果更佳。…

作者头像 李华
网站建设 2026/7/26 3:11:18

14、自定义优化器与正则化技术在深度学习中的应用

自定义优化器与正则化技术在深度学习中的应用 1. 自定义优化器示例 在深度学习中,有时我们需要使用一些无法直接获取的优化器,这时就需要自己开发。例如,有研究表明在训练复杂网络时,向梯度中添加随机噪声可以让普通梯度下降法变得非常有效。但如果要测试这种方法,就不能…

作者头像 李华