
单链表作为数据结构中最基础的线性结构之一,熟练掌握其查找、指定位置插入与删除等操作,是深入学习算法与数据结构的关键一步。本文将从零实现单链表的常用接口,详细拆解每一步思路与代码细节,帮助大家真正理解指针操作与链表结构,夯实编程基础。
一、查找
遍历是查找的核心逻辑。我们让当前指针 pcur 指向头结点,进入循环判断。当 pcur 不为空时,检查其数据域是否等于目标值 x。如果相等,直接返回该节点;否则将 pcur 移动到下一个节点继续判断。若遍历结束仍未找到,则返回 NULL。
SLTNode* SLTFind(SLTNode* phead, SLTDataType x) {
SLTNode* pcur = phead;
while (pcur) {
if (pcur->data == x)
return pcur;
pcur = pcur->next;
}
return NULL;
}
为了验证查找功能,我们可以构建一个简单的测试场景:先插入几个节点,再调用查找函数并打印结果。
void test1() {
SLTNode* head = NULL;
SLTPushFront(&head, 1);
SLTPushFront(&head, 2);
SLTPushFront(&head, 3);
SLTNode* find = SLTFind(head, 1);
if (find)
printf("找到了!\n");
else
printf("未找到\n");
}
执行后的输出如下:

时间复杂度为 O(n)。
二、指定位置之前或之后插入元素
2.1 在指定位置之前
要在 pos 节点之前插入新节点,关键在于找到 pos 的前驱节点 prev。我们需要从头开始遍历,直到 prev->next 指向 pos。此时,将 newnode->next 指向 pos,prev->next 指向 newnode 即可完成插入。这里有个特殊情况:如果 pos 本身就是头结点,那么操作等同于头插,可以直接复用头插逻辑。











