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

牛牛的单链表求和

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-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务