每日科普 · 2026-09-13 周日
考研 408 × 求职面试
知识点 · 数据结构 · 基础
单链表的插入与删除操作
单链表由一个个节点串成,每个节点包含数据域和指向后继的指针。插入与删除的本质都是修改指针指向,逻辑简单但顺序讲究。
1. 插入:在 p 节点之后插入新节点 s,先执行 s.next = p.next,再执行 p.next = s。两步顺序不可颠倒,否则 p 原来的后继节点丢失,链表断裂。若已知前驱指针,插入本身为 O(1);若需先查找位置,则整体为 O(n)。
2. 删除:删除 p 的后继节点 q,执行 p.next = q.next,然后释放 q 的内存(C 语言用 free,Java 等待 GC),同样是已知前驱时 O(1)。
3. 注意事项:不带头节点时,在头部插入或删除首元素要单独修改头指针;头插法建表会得到逆序的链表;操作前要先判断空表、判断指针是否为空的,防止空指针异常;删除节点后及时处理内存,避免泄漏或野指针。
每日一题 · 数据结构
单链表的插入与删除操作
在单链表中,要在指针 p 所指结点之后插入新结点 s,下列操作序列正确的是( )
A. p.next = s;s.next = p.next
B. s.next = p.next;p.next = s
C. p.next = s.next;s.next = p
D. s.next = p;p.next = p.next
解析
选 B。插入的关键是“先接后继、再接前驱”:先让 s.next = p.next,把 p 原来的后继挂到 s 后面;再让 p.next = s,把 s 正式接入链表。若选 A,先执行 p.next = s,p 与原后继的联系就被切断,之后 s.next = p.next 会让 s 指向自己,链表出错。两步均为指针赋值,时间复杂度 O(1),考研常把“两步能否交换顺序”作为陷阱考查。
面试小贴士 · 数据结构
单链表的插入与删除操作
面试官常问:O(1) 时间删除指定节点怎么做?(复制后继数据、转而去删后继);插入两步能否交换顺序。回答时先讲清指针修改顺序,再动手写代码。易错点:忘记空表和头节点特判、赋值顺序颠倒导致断链、删除后内存泄漏或野指针。