6-1-3 单链表结点和
给出单链表类型定义。本题要求实现2个函数,创建单链表并统计所有结点的累加和。
函数接口定义:
/* 用数组arr中的arr_size个元素创建单链表,并返回链表的头指针 */ struct Node* build(int* arr, int arr_size); /* 返回链表中所有结点的累加和 */ int getSum(struct Node* head);
其中 arr
和 arr_size
分别表示指向数组的指针和元素个数。 arr_size
的值不超过10
的范围,函数返回创建的单链表的头指针; head
是单链表的头指针,函数须返回 单链表
中所有结点的累加和。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; /* 用数组arr中的arr_size个元素创建单链表,并返回链表的头指针 */ struct Node* build(int* arr, int arr_size); /* 返回链表中所有结点的累加和 */ int getSum(struct Node* head); int main(int argc, char const *argv[]) { struct Node* head = NULL; int arr_size, i, *arr; scanf("%d", &arr_size); arr = (int*)malloc(arr_size * sizeof(int)); for (i = 0; i < arr_size; i++) scanf("%d", &arr[i]); head = build(arr, arr_size); for (struct Node* p = head; p != NULL; p = p->next) printf("%d ", p->data); printf("\n"); printf("%d\n", getSum(head)); free(arr); return 0; } /* 请在这里填写答案 */
输入样例:
3
1 2 3
输出样例:
1 2 3
6
/* 用数组arr中的arr_size个元素创建单链表,并返回链表的头指针 */
struct Node* build(int* arr, int arr_size)
{
struct Node* head=NULL;
struct Node* tail=NULL;
for(int i=0;i<arr_size;i++)
{
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data=arr[i];
newNode->next=NULL;
if(head==NULL)
{
head=newNode;
tail=newNode;
}
else
{
tail->next=newNode;
tail=newNode;
}
}
return head;
}
/* 返回链表中所有结点的累加和 */
int getSum(struct Node* head)
{
int sum=0;
struct Node* current=head;
while(current!=NULL)
{
sum=sum+current->data;
current=current->next;
}
return sum;
}