1109 字
3 分钟
考研专业课学习记录2026-08-19
考研专业课学习记录 | 2026-08-19
今日学习内容
3h 考研408数据结构章节:线性表的链式存储结构,系统学习单链表的定义、头插法/尾插法创建、按位查找、按值查找、插入、删除等核心基本操作,结合王道考研教材、B站基础网课完成12道课后例题与2道真题模拟练习。
AI知识点带复盘
核心考点拆解
- 单链表的结构定义:考研必考的基础代码题,标准C语言实现为
typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList;,需注意区分LNode和LinkList的区别:LNode是结点结构体类型,LinkList是指向结点的指针类型,通常用LinkList L表示单链表的头指针。 - 头插法与尾插法的核心差异
- 头插法:每次将新结点插入到头结点之后,最终链表的结点顺序与输入顺序完全相反,常用于快速实现链表逆置,适用于需要倒序存储的场景。
- 尾插法:每次将新结点插入到当前链表的表尾,需要额外维护一个尾指针
r指向当前表尾结点,最终链表顺序与输入顺序一致,是工程中最常用的链表创建方式。
- 单链表基本操作的易错点
- 按位查找:需注意遍历的起始位置是头结点的next,循环计数器从1开始,需处理
i<1或i>链表长度的非法输入情况,直接返回NULL。 - 插入操作:必须先找到目标位置的前驱结点,修改指针时需严格遵循
s->next = p->next; p->next = s;的顺序,否则会出现断链丢失后续结点的问题。 - 删除操作:需先获取待删除结点的前驱结点,通过
p->next = q->next; free(q);完成删除,若删除的是首元结点,头结点的next直接指向原首元结点的next即可。
- 按位查找:需注意遍历的起始位置是头结点的next,循环计数器从1开始,需处理
- 真题高频考法:手写单链表的基本操作代码、有序单链表的合并、判断链表是否有环(进阶考点)、链表的就地逆置等,2023年408真题曾考察过单链表的删除操作代码实现。
今日复盘盲区
今天在练习尾插法时,忘记初始化尾指针r为头结点,导致第一次插入新结点时尾指针指向NULL,出现空指针访问错误,后续通过调试修正了该问题。
问题与反思
- 代码实现时容易忽略边界情况的处理:比如当传入的查找位置
i=0或者大于链表实际长度时,没有提前做合法性校验,导致程序崩溃。 - 指针操作的顺序容易混淆:比如头插法中曾先修改头结点的next指向新结点,再将新结点的next指向原头结点的next,导致原链表被完全覆盖。
- 对带头结点和不带头结点的单链表差异理解不够清晰:不带头结点的单链表首元结点就是头指针指向的结点,插入删除操作需要单独处理首元结点的情况,比带头结点的代码更繁琐。
收获与总结
- 彻底掌握了单链表的所有基础操作代码实现,理清了头插法、尾插法的适用场景与代码细节。
- 明确了链式存储结构的优缺点:相比于顺序存储,链式存储的插入、删除操作时间复杂度为O(1)(找到前驱后),但按位查找的时间复杂度为O(n),无法随机访问。
- 学会了如何处理链表操作中的边界情况,养成了在代码开头先校验输入合法性的习惯。
- 理解了头结点的作用:可以统一空表和非空表的插入删除操作,无需单独处理首元结点的特殊情况,降低代码复杂度。
💡 碎碎念:踏实吃透每一个指针操作的细节,不要想当然地跳过边界测试!
文档内容由 AI 辅助生成
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
考研专业课学习记录2026-08-19
https://elysiaweb.vercel.app/posts/408/8-19/ 部分信息可能已经过时
相关文章 智能推荐