设计一个求不带头结点的单链表L的所有data域(假设为int型)之和的递归算法。C语言代码
时间: 2024-09-27 18:05:33 浏览: 46
设计一个递归算法来计算单链表中所有整数元素之和的过程,我们可以定义一个函数`sumList`,它接受链表的头节点作为参数,并利用递归处理链表中的每个元素。
首先,我们需要检查基本情况:如果链表为空,则返回0,因为空列表的和就是0。如果链表非空,我们将当前节点的数据加上当前节点下一个节点的值(通过递归调用`sumList`)。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 递归函数,计算链表和
int sumList(ListNode* head) {
// 基本情况:链表为空
if (head == NULL) {
return 0;
}
// 非空链表,累加当前节点数据并递归处理下一个节点
return head->data + sumList(head->next);
}
// 测试函数,创建示例链表
void createTestList(ListNode** head) {
*head = malloc(sizeof(ListNode));
(*head)->data = 1;
(*head)->next = malloc(sizeof(ListNode));
(*head)->next->data = 2;
(*head)->next->next = NULL; // 创建一个只有两个节点的链表
}
int main() {
ListNode* head = NULL;
createTestList(&head); // 创建测试链表
int totalSum = sumList(head);
printf("单链表所有数据之和为: %d\n", totalSum);
freeListNode(head); // 释放内存
return 0;
}
// 辅助函数:释放链表节点内存
void freeListNode(ListNode* node) {
if (node != NULL) {
free(node->next);
free(node);
}
}
```
在这个代码中,`createTestList`函数用于创建一个简单的链表,然后`main`函数调用`sumList`递归地计算并打印结果。注意,这只是一个基础版本的实现,实际应用中需要添加错误处理和输入链表的读取功能。
阅读全文