zoukankan      html  css  js  c++  java
  • 博客第二天——头插法建立单链表

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

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

  • 相关阅读:
    Zend Framework入门指引
    [技巧]枚举子集的飘逸写法
    [120120]fzyz机房聚会
    [解题报告]ural 1041 Nikifor
    [转载]二分图匹配总结
    [存档]xx09210xxx2010ACMICPC竞赛总结
    [解题报告]ural 1163 Chapaev
    [总结]勿忘本心
    [解题报告]ural 1176 Hyperchannels
    [存档]xx09210xxx2011ACMICPC竞赛总结
  • 原文地址:https://www.cnblogs.com/Wade-James/p/7612800.html
Copyright © 2011-2022 走看看