码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-29 23:12:22      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:第一个   学习   替换   class   新建   结果   malloc   链表   lis   

  今天是第二天,今天遇到一个题:本题要求实现一个函数,求单链表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。满分。

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

 

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

标签:第一个   学习   替换   class   新建   结果   malloc   链表   lis   

原文地址:http://www.cnblogs.com/Wade-James/p/7612800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!