【C语言】牛客网刷题—单链表遍历和求和

简介: 我们在学习编程的过程中,虽然有些语法很简单,但是我们还是要做多题。不做题是发现不了问题的,发现问题我们就可以“对症下药”,进行查漏补缺了。刷题可以先从简单题开始刷,熟练之后再做一些可以提升自己能力的题。今天做的题比较简单,是牛客网上的,大家如果想刷题可以在牛客网里面刷题。

前言


我们在学习编程的过程中,虽然有些语法很简单,但是我们还是要做多题。不做题是发现不了问题的,发现问题我们就可以“对症下药”,进行查漏补缺了。刷题可以先从简单题开始刷,熟练之后再做一些可以提升自己能力的题。今天做的题比较简单,是牛客网上的,大家如果想刷题可以在牛客网里面刷题。


单链表的遍历


描述:

牛牛从键盘输入一个长度为 n 的数组,问你能否用这个数组组成一个链表,并顺序输出链表每个节点的值。

输入描述:

第一行输入一个正整数 n ,表示数组的长度

第二行输入n个数据

输出描述:

制作一个链表然后输出这个链表的值

输入:

4

5 4 2 1

输出:

5 4 2 1

#include<stdio.h>

#include<stdlib.h>

typedef int DataType;

typedef struct linklist

{

DataType x;

struct linklist *next;

}LinkList;

LinkList* InitLinkList()

{

LinkList* head;

head = (LinkList*)malloc(sizeof(LinkList));

head->next = NULL;

return head;

}

void CreateListL(LinkList* head,int n)

{

LinkList* s;

LinkList* last;

last = head;

int i = 0;

for (i = 0; i < n; i++)

{

 s = (LinkList*)malloc(sizeof(LinkList));

 scanf("%d",&s->x);

 s->next = NULL;

 last->next = s;

 last = s;

}

}

void print(LinkList* head)

{

LinkList* p;

p = head->next;

while (p != NULL)

{

 printf("%d ", p->x);

 p = p->next;

}

}

int main()

{

int n = 0;

scanf("%d", &n);

LinkList *S = InitLinkList();

CreateListL(S,n);

print(S);

return 0;

}

对于这个问题,我们要注意两个地方:

1.我们平时对单链表进行遍历往往是从前往后遍历

2.输入样例的顺序和遍历的顺序是一样的,这就要求我们使用尾插法创建单链表。


单链表的求和


描述:

牛牛输入了一个长度为 n 的数组,他想把这个数组转换成链表,链表上每个节点的值对应数组中一个元素的值,然后遍历链表并求和各节点的值。

输入描述:

第一行输入一个正整数 n ,表示数组的长度。

第二行输入 n 个正整数,表示数组中各个元素的值。

输出描述:

把数组转换成链表然后对其求和并输出这个值。

输入:

5

5 2 3 1 1

输出:

12

#include<stdio.h>

#include<stdlib.h>

typedef int DataType;

typedef struct linklist

{

DataType data;

struct linklist* next;

}LinkList;

LinkList* InitList()

{

LinkList* head;

head = (LinkList*)malloc(sizeof(LinkList));

head->next=NULL;

return head;

}

void CreatLinkL(LinkList *head,int n)

{

LinkList* s;

LinkList* last;

last = head;

int i = 0;

for (i = 0; i < n; i++)

{

 s = (LinkList*)malloc(sizeof(LinkList));

 scanf("%d", &s->data);

 s->next = NULL;

 last->next = s;

 last = s;

}

}

void get_sum(LinkList* head)

{

LinkList* p;

int sum = 0;

p = head->next;

while (p != NULL)

{

 sum += p->data;

 p = p->next;

}

printf("%d", sum);

}

int main()

{

LinkList* s;

s = InitList();

int n = 0;

scanf("%d", &n);

CreatLinkL(s, n);

get_sum(s);

return 0;

}

这一题对于单链表的创建就没有要求了,用头插法和尾插法都可以。然后遍历单链表进行求和就可以了,很简单的两道题。(如果有更简单的方法,欢迎大佬在评论区留言,感谢!)

相关文章
|
4月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
2月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
4月前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
4月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
24天前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
24天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
24天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
24天前
|
算法 C语言 开发者
C语言手撕实战代码_单链表
本文档详细介绍了使用C语言实现单链表的各种基本操作和经典算法。内容涵盖单链表的构建、插入、查找、合并及特殊操作,如头插法和尾插法构建单链表、插入元素、查找倒数第m个节点、合并两个有序链表等。每部分均配有详细的代码示例和注释,帮助读者更好地理解和掌握单链表的编程技巧。此外,还提供了判断子链、查找公共后缀等进阶题目,适合初学者和有一定基础的开发者学习参考。
|
2月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
2月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进