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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博客第二天——头插法建立单链表相关的知识,希望对你有一定的参考价值。

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

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

 

以上是关于博客第二天——头插法建立单链表的主要内容,如果未能解决你的问题,请参考以下文章

单链表的头插法与尾插法代码实现及详解

单链表的逆序 (采用头插法实现)

头插法将单链表原地逆转

创建单链表

C实现头插法和尾插法来构建单链表(不带头结点)

每天进步一点点之带头节点单链表