设计一个算法,输出带头结点的非空单链表的第i个元素,若没有找到,输出‘不存在该元素’的标志,C语言代码
时间: 2024-09-19 16:03:56 浏览: 8
设计一个C语言算法来查找非空单链表中的第i个元素,可以采用迭代或递归的方式。这里我们提供一种迭代的方式来实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数声明
Node* findElement(Node* head, int i);
// 主函数
int main() {
// 初始化链表或者假设你已经有一个head指针指向第一个节点
Node* head = ...; // 实际上这里需要根据实际情况填写
int index;
printf("请输入链表索引(i): ");
scanf("%d", &index);
Node* result = findElement(head, index);
if (result == NULL) {
printf("不存在该元素\n");
} else {
printf("第 %d 个元素是:%d\n", index, result->data);
}
return 0;
}
// 查找第i个元素的函数
Node* findElement(Node* head, int i) {
if (head == NULL || i <= 0) { // 链表为空或索引错误
return NULL;
}
Node* current = head;
int count = 1;
while (current != NULL && count < i) {
current = current->next;
count++;
}
return count == i ? current : NULL; // 如果count等于i,说明找到了,否则返回NULL
}
```
在这个代码中,`findElement` 函数通过遍历链表,直到找到第i个节点或到达链表尾部。如果遍历完还没找到,则返回`NULL`表示“不存在该元素”。注意,这个函数假定链表中的元素是从0开始计数的。