题解 | #牛牛的单链表求和#
牛牛的单链表求和
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; }