前言
单链表是数据结构中最基础也最核心的线性表之一,熟练掌握其查找、指定位置插入与删除等操作,是深入学习算法与数据结构的关键一步。本文将从零实现单链表的常用接口,详细拆解每一步思路与代码细节,帮助大家真正理解指针操作与链表结构,夯实编程基础。
一、查找
思路: 遍历:pcur 指向头结点,循环,当 pcur 不为空进入循环,pcur 里面指向的数据为要查找的值的时候就返回 pcur,否则将 pcur 下一个结点的地址赋值给 pcur 然后继续判断,直到找到值。如果为空直接返回。
代码:
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 位置的前一个结点让它的 next 指针指向 newnode,然后让 newnode 的 next 指针指向 pos。如何找到 pos 的前一个结点?那就是遍历,从头结点开始,向后遍历,直到 prev 的 next 指针指向 pos 则就是 pos 的前一个结点。这里要注意,当 pos 为头结点的时候,执行的操作就变为了头插。











