7 单链表的创建,遍历与销毁

从键盘输入任意多个正整数,输入以-1结束。逆序输出这些整数(不包括-1)。
提示:
1、逆序创建单链表。结点数据域是整型数。每输入一个整数,向链表中插入一个结点。当输入-1时结束链表的创建。
2、遍历链表,输出结点数据域的值。
3、遍历完成后,要求销毁该链表。

输入格式:

任意多的正整数,输入序列以-1结束。

输出格式:

逆序输出这些整数(不包括-1)。

输入样例:

在这里给出一组输入。例如:

3 8 2 9 7 4 -1

输出样例:

在这里给出相应的输出。例如:

4 7 9 2 8 3 

代码长度限制

16 KB

时间限制

500 ms

内存限制

64 MB

栈限制

8192 KB

解题思路如下:

首先,需要明确题目要求的功能是创建一个链表,然后允许用户输入一系列的数字,并将这些数字作为链表元素依次添加到链表的头部,且每次添加后链表都应该是反转的。最后,要能够显示链表的内容并在结束时销毁链表。

解题步骤如下:

  1. 定义链表结构
    • 使用typedef定义链表节点的数据类型Node,包括一个数据域Data和一个指向下一个节点的指针域Next
    • 同时定义指向Node的指针类型List,便于后续操作。
  2. 创建空链表
    • 实现Makeempty函数,用于创建一个只有一个头节点的空链表。头节点不包含数据,只用来简化链表操作。
  3. 添加元素并反转链表
    • 实现ReversLinkList函数,该函数接收链表头节点和一个新元素。
    • 在函数内部,为新元素创建一个新节点,并将其插入到链表的头部。
    • 由于每次插入都是在头部,所以每次插入都会导致链表反转。
  4. 显示链表内容
    • 实现DisplayLinkList函数,遍历链表,从头节点后的第一个节点开始,打印每个节点的数据。
  5. 销毁链表
    • 实现DestroyLinkList函数,遍历链表,逐个释放每个节点所占用的内存空间。
    • 注意,需要从头节点的下一个节点开始释放,最后释放头节点本身。
  6. 主函数流程
    • main函数中,首先调用Makeempty创建一个空链表。
    • 进入一个无限循环,不断读取用户输入的数字,直到输入-1为止。
    • 对于每个输入的数字,调用ReversLinkList将其添加到链表头部,并反转链表。
    • 调用DisplayLinkList显示当前链表的内容。
    • 最后,调用DestroyLinkList销毁链表,释放内存。

具体代码如下:

#include<stdio.h>  
#include<stdlib.h>  // 定义链表元素的类型为整型  
typedef int ELemtype;  // 定义链表节点结构体  
typedef struct Node {  ELemtype Data;     // 节点数据  struct Node* Next; // 指向下一个节点的指针  
}Node,*List;  // 创建一个空的链表  
List Makeempty();  // 反转链表,并添加新元素X到链表头部  
void ReversLinkList(List L, ELemtype X);  // 显示链表的内容  
void DisplayLinkList(List L);  // 销毁链表,释放其占用的内存  
void DestroyLinkList(List L);  int main() {  ELemtype n;  List L;  // 创建一个空的链表  L = Makeempty();  // 不断读取用户输入,直到输入-1为止  while (1) {  scanf("%d", &n);  if (n == -1) {  break;  }  else {  // 将新元素添加到链表头部,并反转链表  ReversLinkList(L, n);  }  }  // 显示链表的内容  DisplayLinkList(L);  printf("\n");  // 销毁链表  DestroyLinkList(L);  
}  // 创建一个空的链表,并返回其头节点  
List Makeempty() {  List newNode = (List)malloc(sizeof(struct Node));  if (newNode == NULL) {  exit(EXIT_FAILURE); // 内存分配失败,退出程序  }  newNode->Next = NULL;  // 初始时,链表为空  return newNode;  
}  // 反转链表,并添加新元素X到链表头部  
void ReversLinkList(List L, ELemtype X) {  List list;  // 创建一个新的节点,其数据为X  list = Makeempty();  list->Data = X;  // 将新节点插入到原链表的头部,并反转链表  list->Next = L->Next;  L->Next = list;  
}  // 显示链表的内容  
void DisplayLinkList(List L) {  // 跳过头节点,从头节点的下一个节点开始显示  L = L->Next;  while (L != NULL) {  printf("%d ", L->Data); // 显示节点数据  L = L->Next;            // 移动到下一个节点  }  
}  // 销毁链表,释放其占用的内存  
void DestroyLinkList(List L) {  List p, q;  p = L;  q = p->Next;  // 从链表的第二个节点开始,逐个释放节点  while (q != NULL) {  free(p);  p = q;  q = q->Next;  }  // 释放头节点  free(p);  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] v-viewer 点击失效

首先全局引入 import Viewer from v-viewer import viewerjs/dist/viewer.css Vue.use(Viewer) Viewer.setDefaults({Options: {inline: true,button: true,navbar: false,title: false,toolbar: false,tooltip: true,movable: true,zoomable: true,rotatable: true,scalable:…

【Git】tag 标签用法

文章目录 基本用法 基本用法 Git 可以对某一时间点上的版本打上标签。比如在发布某个软件版本的时候&#xff08; v1.0 等等&#xff09; 查看tag列表 ➜ git tag v0.1 v1.3搜索tag列表 ➜ git tag -l v1.4.2.* v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4显示标签版本信息 ➜ git…

选择IP代理时需要避开哪些误区?

选择IP代理时&#xff0c;许多用户可能会因为对代理服务的不了解而陷入一些误区。这些误区不仅可能影响代理服务的效果&#xff0c;还可能带来安全风险。以下是一些在选择IP代理时需要避开的误区&#xff1a; 第一点是一个常见的误区是过于追求低价&#xff1a;市场上有很多代…

OpenEuler简介与安装

OpenEuler简介与安装 OpenEuler是华为推动的一个免费开源的Linux发行平台。这篇文章简单介绍一下OpenEuler的基本信息&#xff0c;并以当前最新的20.09版本为例&#xff0c;并进行一下x86架构下虚拟机下的安装体验。 基本信息 OpenEuler的基本信息如下所示&#xff1a; 项目…

生成性AI

在当前技术领域&#xff0c;无疑最受关注的进展之一是**生成性AI**&#xff0c;尤其是**生成性对抗网络&#xff08;GANs&#xff09;** 和 **变换器模型** 如GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列。它们在图像生成、文本处理、音频合成等多个方…

深度学习的数学基础--Homework2

学习资料&#xff1a;https://www.bilibili.com/video/BV1mg4y187qv/?spm_id_from333.788.recommend_more_video.1&vd_sourced6b1de7f052664abab680fc242ef9bc1 神经网络的特点&#xff1a;它不是一个解析模型&#xff0c;它的储存在一堆参数里面&#xff08;确定一个超平…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 一、简单介绍 二、简单指定视频某片段快放效果实现原理…

处理SAP CK11N 报错:成本构成结构 Z1 没有被激活

用户发布成本是报错如下&#xff1a; 成本构成结构 Z1 没有被激活 这是对应的成本结构没有打上激活的勾导致的。 配置路径如下&#xff1a; 把勾打上就不会出错了。

P8685 [蓝桥杯 2019 省 A] 外卖店优先级

题目描述 “饱了么”外卖系统中维护着 N 家外卖店&#xff0c;编号 1 ∼ N。每家外卖店都有一个优先级&#xff0c;初始时 (0 时刻&#xff09;优先级都为 0。 每经过 1 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1&#xff0c;最低减到 0&#x…

视频号小店如何找达人,对接达人教程分享,你还在等什么?

大家好&#xff0c;我是电商花花。 视频号现在的流量非常大&#xff0c;尤其是达人的流量&#xff0c;自从视频号引入大量的博主和达人之后&#xff0c;达人带货的流量更是突飞猛进。 如果你想要在视频号小店出单&#xff0c;爆单&#xff0c;那必须要找达人带货&#xff0c;…

一文读懂:到底什么是重删和压缩?

在数字化时代&#xff0c;数据已经成为企业和个人生活中不可或缺的一部分。然而&#xff0c;数据的快速增长也带来了存储空间的需求压力。为了更有效地利用存储空间&#xff0c;重删和压缩这两种技术应运而生&#xff0c;它们被广泛应用在主存、闪存、备份软件和数据传输软件中…

经典面试题数组常用方法都有哪些

1.数组常用方法之 push&#xff08;&#xff09;&#xff08;改变原数组&#xff0c;产生新数组&#xff09; push 是用来在数组的末尾追加一个元素,返回添加以后的长度 var arr [1, 2, 3] ​ // 使用 push 方法追加一个元素在末尾 arr.push(4) ​ console.log(arr) // [1, 2,…

实现 jwt 鉴权- SpringBoot + 微服务

目录 项目结构 主要步骤 auth-service里&#xff1a; 1. 配置 pom.xml 依赖 2. 实现HandlerInterceptor 接口的 preHandle 函数 3. 实现 WebMvcConfigurer 的 addInterceptors 接口 4. 生成 token 和验证 token 5. 登录接口示例 user-service 里&#xff1a; 6. 实现拦…

Python-VBA函数之旅-ascii函数

ascii函数在Python中主要用于将对象(特别是字符和字符串)转换为它们的ASCII表示形式。这种转换在处理文本数据、调试代码以及确保文本以 ASCII 格式存储或传输时非常有用。常见应用场景有&#xff1a; 1、调试和文本处理&#xff1a;当处理包含非ASCII字符(如Unicode字符)的文…

从概念到实践:揭开枚举与联合体在数字化创新时代的神秘面纱

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 在编程的世界中&#xff0c;枚举和联合体是两种非常基础且重要的数据结构。它们各自具有独特的特点和用途&#xff0c;为程序员提供…

S参数介绍:双端口和四端口S参数有哪些

信号在传输过程中&#xff0c;并非完全不变&#xff0c;而是存在一定的损耗和变化。这类似于光的折射现象&#xff0c;在信号传输过程中&#xff0c;一部分信号会在输入端被反射回来&#xff0c;一部分信号会被传输到其它端口&#xff0c;还有一部分信号会在传输过程中被耗散。…

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(三)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析&#xff0c;并进行概括总结。 本系列文章共包含六篇文章&#xff0c;前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_clie…

Linux输出输入重定向

输出重定向 # echo 是打印内容 输出重定向&#xff0c;将123写进1.txt文件中 [rootlocalhost ~]# echo 123 > 1.txt # 将services文件的前5行写进1.txt中 [rootlocalhost ~]# head -5 services > 1.txt注意&#xff1a;输出重定向会先清空文件的内容&#xff0c;再进行写…

C语言-函数指针-快速排序算法(书籍示例-入门)

概述 使用C语言&#xff0c;实现结构体多元素&#xff0c;排序算法&#xff08;冒泡排序&#xff09;&#xff0c;这里使用示例&#xff1a;书籍示例讲解 函数简介 函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参…

初识23种设计模式:分类、原理与实际应用

目录 1. 简介2. 设计模式的分类概述3. 设计模式详解3.1 创建型模式&#xff08;共5种&#xff09;3.1.1 单例模式&#xff08;Singleton&#xff09;3.1.2 工厂方法模式&#xff08;Factory Method&#xff09;3.1.3 抽象工厂模式&#xff08;Abstract Factory&#xff09;3.1.…