博客第二天——头插法建立单链表

  今天是第二天,今天遇到一个题:本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。

  首先考虑这个题目本身不难,鉴于本人刚学习数据结构,题目中已给代码的单链表的创建值得我考虑。题目中给的是头插法代码如下:分析一下这段代码

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;
    }

 

首先是建立一个空单链表,接着输入N个数作为单链表的长度。for循环里面,创建一个p空间,输入数据,将L赋给P的Next域,接着L的地址替换为输入的P,完成单链表第一个元素的建立,第二个是同理,将新建立的结构体P的Next域付给L (使P指向上一个L),这时将P付给L,L->next也指向了上一个L;之后以此类推完成N个元素的单链表创建。该方法就是头插法建立单链表。

  既然都说到这了,那也来看看我做的题。代码如下:

 1 int FactorialSum(List L){
 2     int sum=0;
 3     int mul=1;
 4     int i;
 5     while(L != NULL){
 6         for(i=1;i<= L->Data;i++)
 7         {
 8             mul *= i;
 9         }
10         sum+=mul;
11         mul=1;
12         L=L->Next;
13     }
14     return sum;
15 }

逐次访问单链表L,直至单链表为空。for循环将1到L->的值依次相乘,完成阶乘操作。执行完一次L,将mul加给sum, 同时也是关键的地方每次循环将mul置1.

最后便是返回sum。满分。

  明日将奉上尾插法实现单链表。

 

posted @ 2017-09-29 21:16  詹韦  阅读(1016)  评论(0编辑  收藏  举报