链表所犯错误笔记 链表错题精简笔记1. 结构体自引用指针报错错误代码typedefstructNode{intdata;Node*next;// 结构体内部不能用Node别名}Node,*LinkList;修改方案typedefstructNode{intdata;structNode*next;// 内部自引用必须写struct Node*}Node,*LinkList;说明typedef别名定义完成前结构体内部识别不到Node。2. ListDelete 删除逻辑错误错误代码intListDelete(LinkList head,inti,int*e){// ...if(pre-nextNULL){// 赋值而非判断return0;}Node*del(Node*)malloc(sizeof(Node));// 新建节点没指向待删节点*edel-data;pre-nextdel-next;free(del);return1;}修改方案intListDelete(LinkList head,inti,int*e){// ...if(preNULL||pre-nextNULL){// 使用判断空return0;}Node*delpre-next;// del指向原有待删节点*edel-data;pre-nextdel-next;free(del);return1;}说明混淆赋值与判断错误新建节点造成内存泄漏、数据读取错误。3. DeleteNode 循环内提前释放节点错误代码while(pp-data!e){prep;pp-next;free(p);// 循环内直接释放、return无法完整遍历return1;}修改方案while(pp-data!e){prep;pp-next;}if(p){pre-nextp-next;free(p);return1;}return0;说明删除操作要遍历完成后执行所有分支必须有return。4. ShowList 死循环错误代码while(p){printf(%d ,p-data);// 无pp-next指针不移动}修改方案while(p){printf(%d ,p-data);pp-next;// 指针后移}说明遍历链表必须更新指针否则卡死循环。5. main打印变量误用错误代码printf(99的元素位置%d\n,val);// val存删除的值不是下标修改方案printf(99的元素位置%d\n,LocateElem(L,99));说明需要调用查找函数获取元素位置。#includestdio.h#includestdlib.htypedefstructNode{intdata;structNode*next;}Node,*LinkList;LinkListCreateList(){LinkList head(LinkList)malloc(sizeof(Node));head-nextNULL;returnhead;}voidHeadInsert(LinkList head,inte){Node*p(Node*)malloc(sizeof(Node));p-datae;p-nexthead-next;head-nextp;}voidTailInsert(LinkList head,inte){Node*p(Node*)malloc(sizeof(Node));p-datae;p-nextNULL;Node*qhead;while(q-next){qq-next;}q-nextp;}intListInsert(LinkList head,inti,inte){Node*prehead;intj;for(j1;jipre!NULL;j){prepre-next;}if(preNULL){return0;}Node*newp(Node*)malloc(sizeof(Node));newp-datae;newp-nextpre-next;pre-nextnewp;return1;}intListDelete(LinkList head,inti,int*e){Node*prehead;intj;for(j1;jipre!NULL;j){prepre-next;}if(pre-nextNULL){return0;}Node*delpre-next;*edel-data;pre-nextdel-next;free(del);return1;}intDeleteNode(LinkList head,inte){Node*prehead;Node*phead-next;while(pp-data!e){prep;pp-next;}if(!p)return0;pre-next-p-next;free(p);return1;}//功能3 查找值为e的节点返回位置查不到返回0intLocateElem(LinkList head,inte){Node*phead-next;intpos1;while(p){if(p-datae){returnpos;}pp-next;pos;}return0;}//获取第i个位置的数据intGetElem(LinkList head,inti,int*e){Node*phead-next;intj;for(j1;ji;j){pp-next;}if(!p)return0;*ep-data;return1;}//功能5计算链表有效长度intGetLength(LinkList head){Node*phead-next;intlen0;while(p){len;pp-next;}returnlen;}//清空所有数据节点voidClearList(LinkList head){Node*p,*temp;phead-next;while(p){tempp-next;free(p);ptemp;}head-nextNULL;}//遍历并打印所有元素voidShowList(LinkList head){Node*phead-next;while(p){printf(%d ,p-data);pp-next;}printf(\n);}//销毁整条链表释放全部申请的堆内存voidDestroyList(LinkList head){ClearList(head);free(head);}intmain(){LinkList LCreateList();TailInsert(L,10);TailInsert(L,20);TailInsert(L,30);printf(原始链表);ShowList(L);ListInsert(L,2,99);printf(在第2位插入99: );ShowList(L);intval;ListDelete(L,3,val);printf(删除第三个元素%d,链表,val);ShowList(L);//查找元素位置printf(99的元素位置%d\n,LocateElem(L,99));//获取指定位置值GetElem(L,2,val);printf(第二位的值%d\n,val);//获取链表长度printf(链表当前长度%d\n,GetLength(L));DeleteNode(L,20);printf(删除20之后);ShowList(L);DestroyList(L);return0;}

相关新闻

最新新闻

前端面试核心考点全梳理:事件循环、闭包与手写题详解

前端面试核心考点全梳理:事件循环、闭包与手写题详解

1. 先聊聊:为什么八股文依然绕不开 前端面试圈里一直有个争论:都2026年了,还要背八股文吗?我的观点很明确——要背,但更重要的是理解八股背后真正想考察的东西。 先说个我真实的感受。这两年我参加过不少技术面试&…

2026/8/29 21:47:21
Matlab实现GM(1,1)灰色预测:小样本数据趋势分析与实战

Matlab实现GM(1,1)灰色预测:小样本数据趋势分析与实战

1. 项目概述:从数据迷雾到趋势洞察在数据分析、市场预测、设备寿命评估这些领域,我们常常会遇到一个让人头疼的问题:手头的数据太少了。可能只有寥寥几年的销量记录,或者设备运行初期几个月的故障数据。用传统的统计模型吧&#x…

2026/8/29 21:47:21
MATLAB实现细胞传输模型:从交通流离散化到拥堵仿真全解析

MATLAB实现细胞传输模型:从交通流离散化到拥堵仿真全解析

1. 项目概述:从交通拥堵到细胞传输每次开车堵在路上的时候,我都在想,这密密麻麻的车流,到底能不能用一套数学模型给“算”明白?后来接触了交通工程和数学建模,才发现还真有办法。今天要聊的这个“细胞传输模…

2026/8/29 21:47:21
claude-skills 12大语言专家横向对比:你的项目该用哪个

claude-skills 12大语言专家横向对比:你的项目该用哪个

claude-skills 12大语言专家横向对比:你的项目该用哪个 【免费下载链接】claude-skills 67 Specialized Skills for Full-Stack Developers. Transform Claude Code into your expert pair programmer. 项目地址: https://gitcode.com/GitHub_Trending/claud/clau…

2026/8/29 21:47:21
基于SpringBoot的非物质文化遗产管理系统的设计与实现(源码+文档+部署+讲解)

基于SpringBoot的非物质文化遗产管理系统的设计与实现(源码+文档+部署+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/29 21:47:21
IAP15F2K61S2串口中断优化:从丢帧到稳定高速响应的编程实践

IAP15F2K61S2串口中断优化:从丢帧到稳定高速响应的编程实践

1. 项目概述:当IAP15F2K61S2的串口中断“快”不起来最近在调试一块基于IAP15F2K61S2这颗国产STC增强型51单片机的小板子,核心任务是通过串口接收一串不定长的数据包。按理说,用串口中断接收是再标准不过的操作,但实际跑起来却发现…

2026/8/29 21:42:20