题目描述:有一个带头结点的单链表L,请设计一个算法查找其第1个数据值为e的结点,若存在则返回指向该结点的指针,若不存在则返回 NULL。
算法思想:
输入检查:若链表为空(仅有头结点),直接返回NULL。
遍历链表:从头结点后的第一个结点开始依次向后遍历,比较每个结点的数据域是否等于e。
返回结果:若找到匹配的结点,立即返回指向该结点的指针;若遍历结束未找到,返回NULL。
复杂度分析:
时间复杂度:O(n)空间复杂度:O(1)
cpp
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;
// 查找第一个值为e的结点
LNode* LocateElem(LinkList L, int e) {
if (L == NULL) {
return NULL; // 空链表直接返回
}
LNode *p = L->next; // p指向第一个实际结点(跳过头结点)
while (p != NULL) {
if (p->data == e) {
return p; // 找到则返回指针
}
p = p->next; // 继续遍历
}
return NULL; // 未找到返回NULL
}