1109 字
3 分钟
考研专业课学习记录2026-08-19
2026-08-19

考研专业课学习记录 | 2026-08-19#

今日学习内容#

3h 考研408数据结构章节:线性表的链式存储结构,系统学习单链表的定义、头插法/尾插法创建、按位查找、按值查找、插入、删除等核心基本操作,结合王道考研教材、B站基础网课完成12道课后例题与2道真题模拟练习。

AI知识点带复盘#

核心考点拆解#

  1. 单链表的结构定义:考研必考的基础代码题,标准C语言实现为typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList;,需注意区分LNodeLinkList的区别:LNode是结点结构体类型,LinkList是指向结点的指针类型,通常用LinkList L表示单链表的头指针。
  2. 头插法与尾插法的核心差异
    • 头插法:每次将新结点插入到头结点之后,最终链表的结点顺序与输入顺序完全相反,常用于快速实现链表逆置,适用于需要倒序存储的场景。
    • 尾插法:每次将新结点插入到当前链表的表尾,需要额外维护一个尾指针r指向当前表尾结点,最终链表顺序与输入顺序一致,是工程中最常用的链表创建方式。
  3. 单链表基本操作的易错点
    • 按位查找:需注意遍历的起始位置是头结点的next,循环计数器从1开始,需处理i<1i>链表长度的非法输入情况,直接返回NULL
    • 插入操作:必须先找到目标位置的前驱结点,修改指针时需严格遵循s->next = p->next; p->next = s;的顺序,否则会出现断链丢失后续结点的问题。
    • 删除操作:需先获取待删除结点的前驱结点,通过p->next = q->next; free(q);完成删除,若删除的是首元结点,头结点的next直接指向原首元结点的next即可。
  4. 真题高频考法:手写单链表的基本操作代码、有序单链表的合并、判断链表是否有环(进阶考点)、链表的就地逆置等,2023年408真题曾考察过单链表的删除操作代码实现。

今日复盘盲区#

今天在练习尾插法时,忘记初始化尾指针r为头结点,导致第一次插入新结点时尾指针指向NULL,出现空指针访问错误,后续通过调试修正了该问题。

问题与反思#

  1. 代码实现时容易忽略边界情况的处理:比如当传入的查找位置i=0或者大于链表实际长度时,没有提前做合法性校验,导致程序崩溃。
  2. 指针操作的顺序容易混淆:比如头插法中曾先修改头结点的next指向新结点,再将新结点的next指向原头结点的next,导致原链表被完全覆盖。
  3. 对带头结点和不带头结点的单链表差异理解不够清晰:不带头结点的单链表首元结点就是头指针指向的结点,插入删除操作需要单独处理首元结点的情况,比带头结点的代码更繁琐。

收获与总结#

  1. 彻底掌握了单链表的所有基础操作代码实现,理清了头插法、尾插法的适用场景与代码细节。
  2. 明确了链式存储结构的优缺点:相比于顺序存储,链式存储的插入、删除操作时间复杂度为O(1)(找到前驱后),但按位查找的时间复杂度为O(n),无法随机访问。
  3. 学会了如何处理链表操作中的边界情况,养成了在代码开头先校验输入合法性的习惯。
  4. 理解了头结点的作用:可以统一空表和非空表的插入删除操作,无需单独处理首元结点的特殊情况,降低代码复杂度。

💡 碎碎念:踏实吃透每一个指针操作的细节,不要想当然地跳过边界测试!

文档内容由 AI 辅助生成

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

考研专业课学习记录2026-08-19
https://elysiaweb.vercel.app/posts/408/8-19/
作者
程翊雪
发布于
2026-08-19
许可协议
Unlicensed

部分信息可能已经过时

目录