题解 | #牛牛的单链表求和#

牛牛的单链表求和

https://www.nowcoder.com/practice/a674715b6b3845aca0d5009bc27380b5

#include <stdio.h>
#include <stdlib.h>

typedef struct node{    //定义类型:单链表节点
    int data;
    struct node *next;
}node;
node *createnode()   //创建头节点,不需要传参数,创建完之后返回头节点指针
{
    node *head = malloc(sizeof(node)); //动态分配头节点内存
    if (head == NULL) {    //判断是否分配成功
        printf("out of memory");
        exit(1);
    }
    head->next = NULL;   //把头节点的指针域置为NULL
    return head;    //创建完成返回头节点指针
}

node *add_node(node *head, int data)  //增加节点,需要穿入参数头指针,插入节点的数据元素,返回头指针
{
    node *newnode = malloc(sizeof(node)); //给新节点动态分配内存
    if (newnode == NULL) {      //判断是否分配成功
        printf("out of memory");
        exit(1);
    }
    newnode->data = data;       //给新节点数据域赋值
    newnode->next = head->next; //进行插入操作,使用的是头插法,头节点的指针域所指向的元素赋值给新节点的指针域,新节点等于头指针的指针域所指向的元素
    head->next = newnode;
    return head;
}
    int sumnode(node *head)  //链表中元素求和,穿入参数头指针,返回值为元素总和
    {
        int sum = 0;         
        node *p = head->next; //因为头节点不储存元素,p指向第一个节点(带数据元素)
        while (p != NULL) {   //如果p指向NULL了说明单链表到达尾部,以遍历结束
        sum = sum + p->data;
        p = p->next;
        }
        return sum;
    }
int main() {
   int n;
   scanf("%d", &n);
   int arr[n];//要输入n个元素到数组,所以要先声明一个数组
   node *head = createnode();  //创建头节点返回头节点指针

   for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);   //标准输入每个数到数组中去
        add_node(head, arr[i]); //添加每个数组元素到链表中,调用添加节点函数,先创建节点然后赋值
   }
    int sum = sumnode(head);  //调用求链表节点元素之和,返回求和总数
   printf("%d\n", sum);

    return 0;
}

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务