6-6 求单链表结点的阶乘和(15 分)



Code:

#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 ) {    //factorial —— adj. 阶乘的
	PtrToNode p;    //用上述的结点的数据结构PtrToNode定义一个指针p,因为PtrToNode已经带*了,所以这里的p不用带*.
	int sum = 0, item, i;    //PtrToNode p; 相当于 struct Node *p; 注意要带struct!!
	
	for( p=L; p; p=p->Next ) {    //p指向头结点L,遍历链表。
		item = 1;    //注意每轮都要把item重新置1.
		for( i=p->Data; i>0; i-- )
			item = item * i;
		sum += item;
	}
	return sum;
}

猜你喜欢

转载自blog.csdn.net/yellojesse/article/details/80976139