题目:https://pintia.cn/problem-sets/14/problems/738
#include <stdio.h> #include <stdlib.h> typedef struct Node *PtrToNode; struct Node { int Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ int FactorialSum( List L ); int main() { int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct Node)); scanf("%d", &p->Data); p->Next = L; L = p; } printf("%d\n", FactorialSum(L)); return 0; } int FactorialSum(List L){ int i; int sum,totalsum=0; while(L!=NULL){ sum=1; for(i=L->Data;i>=1;i--){ sum=sum*i; } totalsum+=sum; L=L->Next; } return totalsum; }
要掌握下面三个点:可能会对单链表理解的深入一些
//定义了L,p两个单链表,也意味着链表的头指针
//表示这个头指针不指向任何一个节点()
p->Next = L;//表示p指向的节点的指针域为L
//当指针p赋给L的时候,指针L的值也就改变了,即L和p指向同一个节点
看下面的图,可能理解的好一点: