L是带头结点的单链表的头指针,函数EvenNumber返回L中偶数的个数。如果单链表为空,返回0。数据结构,用gcc编写
时间: 2024-12-02 11:16:53 浏览: 15
在C语言中,你可以使用递归的方式来遍历链表并统计偶数节点的数量。首先,我们需要定义一个辅助函数来检查当前节点的值是否为偶数,然后在主函数中处理空链表的情况以及递归遍历的过程。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义链表节点结构
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 辅助函数,检查节点值是否为偶数
bool is_even(ListNode* node) {
return (node != NULL && node->val % 2 == 0);
}
// 函数EvenNumber,计算链表中偶数节点的数量
int EvenNumber(ListNode* L) {
// 如果链表为空,返回0
if (L == NULL) {
return 0;
}
// 递归处理:如果当前节点是偶数,计数加一;继续处理下一个节点
else if (is_even(L)) {
return 1 + EvenNumber(L->next); // 返回当前节点加上剩余偶数节点数
}
// 否则,仅递归处理下一个节点
else {
return EvenNumber(L->next);
}
}
// 添加链表节点的简单示例,实际场景需要根据需求自定义
void insert(ListNode** head, int val) {
ListNode* newNode = malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = *head;
*head = newNode;
}
int main() {
// 初始化链表并插入一些元素
// 创建链表...
// 调用EvenNumber函数,并打印结果
int even_count = EvenNumber(*head);
printf("链表中偶数节点的个数: %d\n", even_count);
return 0;
}
```
阅读全文