C
语言-单链表的按位查找和按值查找 ⭐️
单链表的结构体定义,请查看我的另一篇文章。
一、C
语言-单链表的按位查找 🍭
【题目】有一个带头结点的单链表
L
,请设计一个算法查找其第i
个结点位置,若存在则返回该结点的指针,若不存在则返回NULL
。
LNode *search_i(LinkList L, int i) {
if (i < 1) return NULL; // 如果 i 小于 1,返回 NULL,因为链表的下标从 1 开始
int k = 1; // 初始化计数器 k,用于记录当前遍历到的节点位置
LNode *p = L->next; // 初始化指针 p,指向链表的第一个节点(头节点的下一个节点)
// 遍历链表,直到找到第 i 个节点或链表结束
while (p != NULL && k < i) {
p = p->next; // 移动到下一个节点
k++; // 计数器加 1
}
return p; // 返回第 i 个节点的指针,如果链表长度小于 i,则返回 NULL
}
二、C
语言-单链表的按值查找 🍭
【题目】有一个带头结点的单链表
L
,请设计一个算法查找其第1
个结点数据值为e
的元素,若存在则返回该结点的指针,若不存在则返回NULL
。
LNode *search_e(LinkList L, int e) {
LNode *p = L->next; // 初始化指针 p,指向链表的第一个节点(头节点的下一个节点)
// 遍历链表,直到找到数据等于 e 的节点或链表结束
while (p != NULL && p->data != e) {
p = p->next; // 移动到下一个节点
}
return p; // 返回数据等于 e 的节点的指针,如果未找到,则返回 NULL
}
【补充】如果需要查找链表中所有数据值等于
e
的节点,可以修改代码如下:
void search_all_e(LinkList L, int e) {
LNode *p = L->next; // 初始化指针 p,指向链表的第一个节点
int position = 1; // 记录节点的位置
printf("数据值为 %d 的节点位置:", e);
while (p != NULL) {
if (p->data == e) {
printf("%d ", position); // 输出节点的位置
}
p = p->next; // 移动到下一个节点
position++; // 位置加 1
}
printf("\n");
}
示例调用
search_all_e(L, 20);
输出结果
数据值为 20 的节点位置:2