用递归的方法求带头结点的单链表L中的所有结点值之和
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Node {
int data; //数据域
struct Node*next; //指针域
}LinkNode; //单链表节点类型
//首先用头插法创建一个单链表
void CreateLinkHead(LinkNode*&L, int a[], int n) {
L = (LinkNode *)malloc(sizeof(LinkNode));//创建头结点
L->next = NULL; //将头结点next域置空
LinkNode *s; //创建结点s
for (int i = 0; i < n; i++) {
s = (LinkNode *)malloc(sizeof(LinkNode)); //给结点s开辟空间
s->data = a[i]; //给结点s的数据域赋值
s->next = L->next; //头插法进行插入
L->next = s;
}
}
//用递归的方法求带头结点的单链表L中的所有结点值之和
int Sum(LinkNode *L) {
if (L==NULL) { //递归出口
return 0;
}
else {
return (L->data + Sum(L->next)); //递归
}
}
int main() {
LinkNode *L;
cout << "请输入链表的数据的个数:";
int n;
cin >> n;
int *a = new int[n]; //用数组来接收链表的数据
for (int i = 0; i < n; i++) {
cin >> a[i];
}
CreateLinkHead(L, a, n); //调用头插法的函数
cout << "结点的和为:" << Sum(L->next) << endl;
system("pause");
}