练习的题目<单链表求和>题目难度较小。
1、题目描述
小明输入了一个长度为 n 的数组,他想把这个数组转换成链表,链表上每个节点的值对应数组中一个元素的值,然后遍历链表并求和各节点的值。
输入描述:
第一行输入一个正整数 n ,表示数组的长度。
第二行输入 n 个正整数,表示数组中各个元素的值。
输出描述:
把数组转换成链表然后对其求和并输出这个值。
2、实例
输入:5 5 2 3 1 1
输出:12
3、题解
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int SLDataType;
typedef struct SListNode
{
struct SListNode*next;
SLDataType Data;
}SLNode;
SLNode*BuyNode(SLDataType X)
{
SLNode*newnode = (SLNode*)malloc(sizeof(SLNode));
if (newnode == NULL)
{
printf("malloc is fail\n");
}
else
{
newnode->next = NULL;
newnode->Data = X;
}
return newnode;
}
void SLNodePushBack(SLNode**pHead, SLDataType X)
{
SLNode*newnode = BuyNode(X);
if (*pHead == NULL)
{
*pHead = newnode;
}
else
{
SLNode*tail = *pHead;
while (tail->next != NULL)
{
tail = tail->next;
}
tail->next = newnode;
}
}
int SLNodeSum(SLNode*pHead)
{
SLNode*tail=pHead;
int sum=0;
while(tail!=NULL)
{
sum+=tail->Data;
tail=tail->next;
}
return sum;
}
int main()
{
SLNode*PList = NULL;
int i, n = 0;
int arr[100] = { 0 };
scanf("%d\n", &n);
for (i = 0; i<n; i++)
{
scanf("%d ", &arr[i]);
SLNodePushBack(&PList, arr[i]);
}
int sum=SLNodeSum(PList);
printf("%d ",sum);
return 0;
}
点击链接加入群聊【C语言/C++编程学习基】:
小鱼快来啊的个人空间-小鱼快来啊个人主页-哔哩哔哩视频哔哩哔哩小鱼快来啊的个人空间,提供小鱼快来啊分享的视频、音频、文章、动态、收藏等内容,关注小鱼快来啊账号,第一时间了解UP注动态。编程学习群:724050348 每天分享一个编程小游戏~C/C++游戏源码素材及各种安装包, 私信不常看!https://space.bilibili.com/1827181878?spm_id_from=333.1007.0.0