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

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

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

时间: 2024-10-13 17:45:09

博客第二天——头插法建立单链表的相关文章

头插法建立单链表

#include<stdio.h>#include<stdlib.h> typedef struct node{ int data; struct node *next;}LNode,*LinkList; LinkList creat_list(){ LinkList head=NULL; head=(LinkList)malloc(sizeof(LNode)); if(head==NULL) { printf("memory out of use\n"); r

C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)

1题目 实现两个链表的合并 2基本功能要求: 1.建立两个链表A和B,链表元素个数分别为m和n个. 2.假设元素分别为(x1,x2,-xm),和(y1,y2, -yn).把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,-xn,yn,-,xm 当n>m时,C=y1,x1,y2,x2,-ym,xm,-,yn 3.输出线性表C: 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D. 3测试数据: (1)A表(30,41,15,12,56,80) B表(23,56,

数据结构—头插法逆转单链表——空间复杂度为O(1)

#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int data; Node *next; }; //初始化 Node *init() { Node *head=new Node; head->next=NULL; return head; } //头插法创建节点 void insetList(Node *head,in

C++练习 | 不使用头插法逆转单链表

void D(PBook pHead) { PBook p,q,s; p=pHead->next->next; q=p->next; s=q->next; pHead->next->next=NULL; p->next=pHead->next; q->next=p; p=q; q=s; while(q->next!=NULL) { s=q->next; q->next=p; p=q; q=s; } q->next=p; pHea

建立单链表的方法

#include<iostream> using namespace std; struct node{ int d; struct node *next; };//定义结点 node *build1()//头插法构造单链表 { node *p;//指向新建结点 node *head;//头指针 head=NULL; p=head; int x; cin>>x;  while(x!=-1)  {  p=new node;  p->d=x;  p->next=head;

采用头插插法和尾插法建立单项链表

PS: 来源2014年数据结构联考复习指导 Page27. #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; const int END_INPUT = -1; typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; LinkList CreatList1(LinkList

“进度条”博客——第二周

“进度条”博客——第二周 第二周 所花时间(包括上课) 上课时间:一周两节课,共3个小时左右 课下时间:周三下午4点到晚上6点左右(搜集相关资料并构思) 周五下午4点到9点40左右(当然中间包括吃饭.休息和与室友讨论问题解法 的时间) 周六早上8:10-11:00:然后吃饭午休:下午2:15-6:00:然后吃晚饭:晚上7:45—9:45左右修改代码测试 周日8:15—11:30单元测试发表博客 总计:20个小时左右(这周的任务比较艰巨……) 代码量(行) 839行(不包含单元测试代码) 博客量(

团队博客第二周——DIG

团队博客第二周--DIG 修改完善上周提交的需求规格说明书 服务人群的改变 考虑到我校特有的保密性质,经小组讨论修改应用人群,从大众转向特定局部网络下的特定人群,例如:军人.秘密基地.山区等 修改应用场景 用户场景A:军人小伟和小邹在一个特殊的训练基地,时间紧急,为尽快了解所有菜品,进行点菜,使用APP. 用户场景B:小泊看了食堂的菜,觉得并不好吃,在APP中选择跳转至美团,即可进入美团界面,进行望梅止渴. 支付接口取消 在经过实际调研之后,了解到想要把微信或者支付宝接口连接到我们的APP上,并

新浪博客另类截流玩法

相信大家都在愁怎么才能让自己的粉丝裂变.今天就分享一个"神器"玩法,我们很多时候都离不开引流,然后通过转化,形成成交,做好了之后打造一个售后系统处理后续问题.其实整个无非说穿了就是这么多,再者执行力的问题. 我们发广告.加好友.做截流,其实本质是都是为了流量,是为了让更多的人看到你的产品,然后产生购买.因此"流量为王"几乎让多数人达成共识.没有流量来,你的产品,你的思维还能卖出去吗? 有个朋友爆料最近的新玩法.还有一些截流.同行相互竞争的. 下面给大家说说具体操作步