问题描述:

假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

问题解答:

算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将小的结点链入链表中,同时后移工作指针。该问题要求结果链表按元素值递减次序排列,故新链表的建立应该釆用头插法。比较结束后,可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。

void MergeList(LinkList &La,LinkList &Lb) {

//合并两个递增有序链表(带头结点),并使合并后的链表递减排列

LNode *r, *pa=La->next, *pb=Lb->next; //分别是表 La 和 Lb 的工作指针

La->next = NULL; //La作为结果链表的头指针,先将结果链表初始化为空

while(pa&&pb) //当两链表均不为空时,循环

if(pa->data<=pb->data){

r=pa->next; //r暂存pa的后继结点指针

pa->next=La->next;

La->next=pa; //将pa结点链于结果表中,同时逆置(头插法)

pa=r; //恢复pa为当前待比较结点

}else{

r=pb->next; //r暂存pb的后继结点指针

pb->next=La—>next;

La->next=pb; //将pb结点链于结果表中,同时逆置(头插法)

pb=r; //恢复pb为当前待比较结点

}

if(pa)

pb=pa; //通常情况下会剩一个链表非空,处理剩下的部分

while(pb){ //处理剩下的一个非空链表

r=pb->next; //依次插入到La中(头插法)

pb->next = La->next;

La->next = pb;

pb=r;

}

free(Lb);

}

链表归并成递减c语言,将两个递增的单链表合并为一个递减的单链表相关推荐

  1. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  2. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(自己编程)

    建立一个链表,每个结点包括:学号.姓名.性别.年龄.输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去.最近接触到了链表的编程学习,遇到这样的比较基础的编程,程序表现大致分为几个步骤 ...

  3. 链表归并成递减c语言,将递增有序单链表A和B归并成表C 递减单链表的尾插法建立和输出...

    自己辛苦成果,拿出来帮助那些数据结构没学好和C语言基础差的人 #include #include typedef struct Node { int data; struct Node *next; ...

  4. 【练习】归并和冒泡两种方法c++将两个无序链表合并为一个升序的有序链表

    定义: struct node {int data;node* next;}; 新建有头指针的链表: struct node *head; head = NULL;//头指针初始为空 struct n ...

  5. C++ leetcode 21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    一.C++ 代码 class Solution { public:ListNode* insert(ListNode *res, int val) {if (res->val == INT_MA ...

  6. keil流水灯c语言程序两个一起亮,Keil单片机点亮一个灯及循环流水灯三种实现方法详解...

    实验名称:keil工程建立,点亮一个led灯 实验目的:学会keil软件安装,熟悉keil界面并学习如何新建一个工程 实验器材:安装有keil的电脑一台 预习内容及原理: Keil C51已集成到一个 ...

  7. C语言试题十之将两个两位数的正整数a b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。

  8. mysql 查询结果横向拼接_两个SQL查询,横向合并为一个查询结果

    第一条sql: select unit,count(*)as number from archives_management group by unit 第二条sql: select fine_uni ...

  9. python合并列表重新排序_python – 将两个已排序的列表合并为一个更大的排序列表...

    我正在尝试创建一个合并函数,将在我正在进行的合并排序中使用. 我遇到了一些麻烦,我似乎无法找到错误. 我评论它试图向你们展示我的思考过程: def merge(aList, bList): newLi ...

最新文章

  1. 10个小窍门,让你轻松准确搜索。
  2. RabbitMQ 和 Kafka 到底怎么选?
  3. 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
  4. celery异步邮件发送系统出现django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM
  5. html 滚动条停止事件,CSS scroll-snap滚动事件停止及元素位置检测实现
  6. Hibernate中使用Criteria查询及注解——(HibernateUtil)
  7. 关于图连通性的几道题(水)
  8. 读书印记 - 《沟通的艺术:一本手把手教你社交沟通的书》
  9. 用纯css3和html实现一些复杂的泡沫对话框
  10. [C# 基础知识系列]专题十五:全面解析扩展方法
  11. 养老金上涨后,退休老人每个月6500元的养老金,属于什么水平?
  12. atitit.提升备份文件复制速度(1) -----分析统计问题and解决方案
  13. 希腊字母表 ← LaTeX
  14. linux b类地址设24位掩码,子网掩码的设置方法和作用
  15. 仿微博系统数据库设计和er图设计
  16. 一切业务数据化,一切数据业务化
  17. android 特效字体下载,Android 一定有你想要的 文字特效 文字动画 艺术字
  18. 浩辰CAD参考图剪辑编辑
  19. 数据结构-排序算法总结与感悟
  20. r语言把两个折线图图像放到一个图里_图像目标检测算法总结(从R-CNN到YOLO v3)...

热门文章

  1. Orchard Core一分钟搭建ASP.NET Core CMS
  2. WebSocket In ASP.NET Core(二)
  3. 两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置
  4. 大咖开讲:一小时学会.NET MVC开发的那些事儿
  5. .NET Core:面向未来的开源跨平台开发技术
  6. 3分钟看完 Day2 Keynote
  7. mysql中的操作指令,MySQL中常用指令操作的介绍(代码示例)
  8. comboBox绑定数据库后SelectedIndexChanged事件出错
  9. Android之glide加载圆形图片地址异常监听
  10. Android studio之Error:(23, 17) Failed to resolve: junit:junit:4.12