单链表的合并

分数 5

作者 李卫明

单位 杭州电子科技大学

1.2 编写程序,在第1题(第1题:编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁。程序不可存在内存泄漏。)基础上合并2个单链表,合并前后单链表保持递增或相等次序,显示合并前后单链表。注意不可存在内存泄漏。。

输入格式:

若干整数。

输出格式:

每个单链表输出占一行,元素间用分隔符分隔;共3行

输入样例:

100 2 3 -2 -8 -6 -9 -10 50 2 -1

输出样例:

2->2->3->50->100
-10->-9->-8->-6->-2->-1
-10->-9->-8->-6->-2->-1->2->2->3->50->100

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

C程序如下:

#include<stdio.h>  
#include<stdlib.h>  typedef struct LinkList {  int Data;  struct LinkList *Next;  
} LinkList, *List;  List  CreatHead();//创建单链表
void Display(List L);//输出单链表
void Destroy(List L);//销毁单链表
void Sort(List L);//将单链表按从小到大的顺序排列
void Merge(List A,List B,List C);//将A和B合并为C(不创建新的结点)int main() {List firstHead, firstTail,secondHead,secondTail,third;firstHead = CreatHead();//创建第一个单链表的头结点firstTail = firstHead;//第一个尾巴指针指向第一个单链表的头结点secondHead = CreatHead();//创建第二个单链表的头结点secondTail = secondHead;//让第二个尾巴指针指向第二个单链表的头结点third = CreatHead();//创建第三个单链表的头结点int v;while (scanf("%d", &v) != EOF) {//scanf成功读取数据时返回EOF,读取失败时返回-1if (v > 0) {//当我们在scanf函数中输入CTRL + Z时,结束 scanf 函数,达到控制循环的目的。List L = CreatHead();//创建一个新结点L->Data = v;//让其数据域赋值为vfirstTail->Next = L;//尾指针的Next域指向新结点firstTail = L;//更新尾指针}else {List L = CreatHead();L->Data = v;secondTail->Next = L;secondTail = L;}}Sort(firstHead);//排序Sort(secondHead);Display(firstHead);//输出单链表Display(secondHead);Merge(firstHead,secondHead,third);//合并两个单链表Display(third);//输出合并后的单链表Destroy(third);//销毁单链表Destroy(firstHead);//这里采用创建新结点的方式合并两个单链表,因此最后需要将三个单链表全部销毁Destroy(secondHead);
}List CreatHead() {  List p = (List)malloc(sizeof(LinkList));  //向内存申请空间if (p == NULL) {  exit(EXIT_FAILURE); // 分配失败时退出  }  p->Next = NULL;  //p的Next域赋值为空return p;  //返回p指针所指向的地址
}  void Display(List L) {List p = L->Next;  //p指向L的Next域,即第一有效结点while (p) {  //若链表不为空printf("%d", p->Data);  //输出数据p = p->Next;  //p指向下一有效结点if (p) printf("->");  //若该结点不为空则输出“->”}  //根据题目要求的输出结果printf("\n");  //换行
}void Destroy(List L) {  List p = L;  //p指向该单链表的头结点while (p->Next) {  //p的下一结点为空时退出循环List q = p->Next;  //要删除的结点为头节点的下一个结点,即第一有效结点,记录下来这个结点的地址p->Next = q->Next;  //头结点指向要删除结点的下一个结点free(q);  //删除该结点}//循环结束时只剩头结点free(p);//删除头结点
}  void Sort(List L) {//选择排序List pStar, pcur,pMin;pStar = L->Next;//pStar指向第一有效结点int temp;//临时变量for (;pStar != NULL;pStar = pStar->Next) {//外循环pMin = pStar;//假设最小为pStar,即每次外循环的第一个结点for (pcur = pMin->Next;pcur != NULL; pcur = pcur->Next) {//内循环从pStar的下一个结点开始if (pcur->Data < pMin->Data) {pMin = pcur;//若找到更小则将其地址赋值给pMin}}if (pStar != pMin) {//若最小值地址与最初假设的不同则进行交换temp = pMin->Data;pMin->Data = pStar->Data;pStar->Data = temp;}}
}void Merge(List A, List B, List C) {List pTail = C;//尾指针指向C的头结点A = A->Next;//指向第一有效结点B = B->Next;//指向第一有效结点while (A && B) {//若A和B链表都不为空if (A->Data < B->Data) {//将更小的值加入新链表中List NewNode = CreatHead();NewNode->Data = A->Data;pTail->Next = NewNode;pTail = NewNode;A = A->Next;//加入后指针指向下一个结点}else {List NewNode = CreatHead();NewNode->Data = B->Data;pTail->Next = NewNode;pTail = NewNode;B = B->Next;}}while (A) {//将剩下的数据依次加入到新结点List NewNode = CreatHead();NewNode->Data = A->Data;pTail->Next = NewNode;pTail = NewNode;A = A->Next;}while (B) {List NewNode = CreatHead();NewNode->Data = B->Data;pTail->Next = NewNode;pTail = NewNode;B = B->Next;}
}

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

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

相关文章

UI设计速成课:理解模态窗口与非模态窗口的区别

我们日常所说的弹性框架是非常笼统的概念。我们习惯性地称之为对话框架、浮动层和提示条。弹性框架可以分为两种:模态弹性框架和非模态弹性框架。产品需要弹性框架来传递信息&#xff0c;用户需要弹性框架来接受反馈&#xff0c;但是没有经过推敲的弹出窗口设计很容易让用户感到…

最新版首发 | 手把手教你安装 Vivado2024.1(附安装包)

Q&#xff1a;Vivado出2024版了&#xff01;不知迪普微有没有对应的安装包呢&#xff1f; A&#xff1a;有的&#xff01;回复“Vivado2024.1”即可获得相应安装包哦~ Q&#xff1a;好哒~但是我不会安装&#xff0c;可否安排一期安装教程&#xff1f; A&#xff1a;立马安排&…

Gin 详解

Gin 介绍 gin框架是一个基于go语言的轻量级web框架&#xff0c;它具有高效性、灵活性、易扩展性路由 gin框架使用的是定制版的httprouter 其路由原理是大量使用公共前缀的树结构&#xff0c;注册路由的过程就是构造前缀树的过程。 具有公共前缀的节点也共享一个公共父节点。…

怎么移除pdf文件编辑限制,有哪些方法?

PDF是我们在学习或工作中常常应用到的一种文件格式&#xff0c;因为它的跨平台性和文档保真度而备受欢迎。但是&#xff0c;有时我们会遇到PDF编辑权限被限制了&#xff0c;那么pdf解除编辑限制可以用什么方法呢&#xff1f;别急&#xff0c;接下来&#xff0c;本文将深入探讨如…

关于Panabit在资产平台中类型划分问题

现场同事问了一个问题&#xff1a;Panabit能不能当做CentOS接入&#xff1f; 我第一反应是&#xff1a;Panabit是个什么鬼&#xff1f;为啥要混编接入&#xff1f;后期维护都是事啊。所以&#xff0c;我就想回答&#xff1a;不能&#xff01; 但是&#xff0c;最好要给出一个…

通过sql语句直接导出excel文件

SELECT column1 as 名字 FROM your_table INTO OUTFILE /path/to/your_file.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n 这里的注意事项是&#xff0c;INTO OUTFILE 这后面的路径需要通过下面的SQL查出来 show variables like %secure%; 操作步骤…

构建多模态模型,生成主机观测指标,欢迎来战丨2024天池云原生编程挑战赛

在当前云计算和微服务架构日益普及的背景下&#xff0c;企业和开发者对云资源的依赖日益加深。Elastic Compute Service&#xff08;ECS&#xff09;作为提供计算能力的核心服务&#xff0c;承担着众多的业务。随着微服务架构的广泛应用&#xff0c;任务的部署和执行变得更为灵…

AWS亚马逊云必须要实名吗?

AWS需要实名验证吗&#xff1f;为什么&#xff1f;对于这些问题有不少人存在疑惑&#xff0c;现由aws的合作伙伴九河云进行讲解&#xff1a; 在注册AWS账户时&#xff0c;需要提供基本信息&#xff0c;包括电子邮件地址、密码和账户名称&#xff0c;并确保密码复杂度足够强以保…

mysql密码过期的修改(Your password has expired. ..)

参考文章&#xff1a;mysql密码过期的修改方法&#xff08;your password has expired&#xff09;_我是知青-RuoYi 若依 (csdn.net) 问题&#xff1a;Your password has expired. To log inyou must change it using a clientthat supports expired passwords. 解决方式&…

无线领夹麦克风哪个牌子好用?一文揭秘哪种领夹麦性价比最高!

​无线领夹麦克风&#xff0c;无疑是现代音频技术的杰出代表。它摆脱了传统有线麦克风的束缚&#xff0c;让声音的传播更加自由、灵活。无论是追求极致音质的音乐爱好者&#xff0c;还是需要高效沟通的商务人士&#xff0c;无线领夹麦克风都能满足你的需求&#xff0c;让你的声…

在面试中展示自己的系统架构设计能力

在面试中展示自己的系统架构设计能力是一个关键过程,以下是一些建议,帮助你充分展示你的专业能力和经验: 1. 准备充分的项目案例: 挑选一两个你最为熟悉和自豪的项目案例,并事先准备好详细的介绍和说明。突出在这些项目中你如何运用架构设计原则和技术,解决了哪些挑战,…

人的酒量到底有多大,多长时间可以练到千杯不醉?

人的酒量是指一个人能够消耗多少酒精而不至于出现明显的不适或醉酒现象&#xff0c;它受到多种因素的影响。下面将详细解释决定酒量的主要因素&#xff1a; 遗传因素&#xff1a;遗传在决定一个人的酒量上扮演了重要角色。研究表明某些基因变异&#xff0c;如酒精脱氢酶和乙醛…

Kantana和The Sandbox联手打造元宇宙娱乐的未来

The Sandbox 是一个开创性的元宇宙、游戏和创作平台&#xff0c;泰国领先的娱乐公司 Kantana 很高兴地宣布双方将建立合作关系&#xff0c;共同打造元宇宙娱乐的未来。 此次合作结合了 Kantana 引以为傲的故事讲述专长和The Sandbox 的用户生成内容 (UGC) 工具&#xff0c;创建…

Shardingsphere-Proxy 5.5.0部署

Shardingsphere-Proxy 5.5.0部署 Shardingsphere系列目录&#xff1a;背景下载安装包Linux解压安装包修改配置文件global.yamldatabase-sharding.yaml 引入数据库驱动启动代理连接代理数据库Navicate工具连接MYSQL客户端连接 Shardingsphere系列目录&#xff1a; 【Springboot…

分布式系统之衡量指标:性能、资源、可用性和可扩展性

分布式系统的重要指标&#xff1a;性能、资源、可用性和可扩展性 在设计和评估分布式系统时&#xff0c;性能、资源占用、可用性和可扩展性是四个关键的指标。这些指标帮助我们理解系统在不同条件下的表现&#xff0c;并指导我们进行优化和改进。以下是对这些指标的详细描述和分…

山东大学软件学院创新项目实训开发日志——收尾篇

山东大学软件学院创新项目实训开发日志——收尾篇 项目名称&#xff1a;ModuFusion Visionary&#xff1a;实现跨模态文本与视觉的相关推荐 -------项目目标&#xff1a; 本项目旨在开发一款跨模态交互式应用&#xff0c;用户可以上传图片或视频&#xff0c;并使用文本、点、…

ardupilot开发 --- RTSP视频流 篇

我年轻时很穷&#xff0c;努力了几年&#xff0c;终于不再年轻了 0. 一些概念参考文献 0. 一些概念 RTSP服务、RTSP推流、RTSP拉流&#xff0c;缺一不可&#xff0c;尤其是RTSP服务。RTSP服务器、RTSP客户端。推流和拉流都是由客户端发起&#xff0c;向服务器发起对应的请求。…

leetcode 动态规划(基础版)删除并获得点数

题目&#xff1a; 给你一个整数数组 &#xff0c;你可以对它进行一些操作。nums 每次操作中&#xff0c;选择任意一个 &#xff0c;删除它并获得 的点数。之后&#xff0c;你必须删除 所有 等于 和 的元素。nums[i]nums[i]nums[i] - 1nums[i] 1 开始你拥有 个点数。返…

【千帆AppBuilder】你有一封邮件待查收|未来的我,你好吗?欢迎体验AI应用《未来信使》

我在百度智能云千帆AppBuilder开发了一款AI原生应用&#xff0c;快来使用吧&#xff01;「未来信使」&#xff1a;https://appbuilder.baidu.com/s/Q1VPg 目录 背景人工智能未来的信 未来信使功能介绍Prompt组件 千帆社区主要功能AppBuilderModelBuilder详细信息 推荐文章 未来…

服务器返回的Json出现了$ref

这是因为返回的对象嵌入了另一个对象 , 但是实际后台业务中它们是不同的对象 . 这个时候可以关闭循环引用来解决这个问题. package cn.com.baidu;import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageC…