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

思路
1.利用**原来两个单链表的结点*:将A的表头摘下,作为新表的表头

两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点进行比较,将小的结点连入链表中,同时后移工作指针。
**思路来源:**可以通过最终目的倒推得到:最终得到的新链表一定是包含两个原链表中所有元素,并且降序排列,而原来两表都是递增排列,所以作为只能单向扫描的单链表,每次前进扫描得到的元素都在增加,所以首先考虑头插法,(大的放在最前面),
越小的元素越早进行头插,所以可以直接两表同时扫描,每次得到当前扫描位置下最小的元素(也就是两表并集中最小的元素)率先进行头插操作

需要变量:La,Lb,各自的遍历工作指针pa,pb
新表中头插法小助手r,因为每次只插入一个元素,所以只设立一个后继指针
(该问题要求结果链表按元素值递减次序排列,故新链表的建立应该采用头插法。)
2.比较结束后,可能会有一个链表非空,剩下的都是大于另一链表所有元素的元素了,头插法连入新链表
**小技巧:**为了避免重复写出A表非空和B表非空两种情况,可以利用谁剩余谁用b的指针,来减少写A剩余的情况,一个B情况就够用了

void MergeList(LinkList &La,LinkList &Lb){LNode*pa=La->next,*pb=Lb->next;*rLa->next=NULL;while(pa&&pb){if(pa->data<=pb->data){//将AB两表中较小值通过头插法插入新表r=pa->next;pa->next=La-next;La->next=pa;pa=r;}else{r=pb->next;pb->next=La-next;La->next=pb;pb=r;}  if(pa)pb=pa;while(pb){//处理剩下的一个非空链表r=pb->next;//依次插入到La中,头插法pb->next=La-next;La->next=pb;pb=r;}    free(Lb);}}

小白算法积累——单链表13#带头结点单链表+就地归并+改序相关推荐

  1. 小白算法积累——单链表6#带头结点单链表+递增有序

    题目:有一个带头结点的单链表L,设计一个算法使其元素递增有序. 关键字:带头结点单链表+递增有序 思路 采用直接插入排序算法的思想:就是先分理出头结点+第一个结点组成原始新链表,然后依次将后续结点摘下 ...

  2. 小白算法积累——单链表21#带头结点单链表+倒数查找

    题目:已知一个带有表头结点的单链表,结点结构为data|link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数). ...

  3. 数据结构之不带头结点单链表和带头结点单链表相关操作实现(C语言)

    文章目录 单链表定义 不带头结点单链表 带头结点单链表 头结点和头指针的区分 带头结点单链表优点 单链表定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 不带头 ...

  4. #数据结构:编写不带头结点单链表的建立、插入和删除算法

    编写不带头结点单链表的建立.插入和删除操作算法. 一.问题描述 编写一个不带头节点的单链表 二.基本要求 1) 建立 2) 插入 3) 删除 三.算法思想 选用不带头结点的单链表,在第一个元素节点前插 ...

  5. 带头结点单链表就地逆置算法

    1.带头结点单链表就地逆置算法 部分函数调用参考如下:https://blog.csdn.net/qq_50504109/article/details/120288749 /*** 单向链表的逆置, ...

  6. 算法与数据结构之带头结点和不带头结点单链表存在的问题

    带头结点和不带头结点单链表注意的小细节 在写不带头结点的单链表中发现了一个问题,这个问题在带头结点的单链表中也存在,那就是值传递的问题. 首先来看一下 #include<stdio.h> ...

  7. java不带头结点单链表,java带头结点的单链表

    JAVA 循环双链表的建立 import java.util.Scanner; //循环双向链表的结点类 class DuLNode { private Object data;// 存放结点值 前驱 ...

  8. 创建带头结点单链表实现二进制数加1的运算

    题目描述: 建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位.在此链表上实现对二进制数加1的运算,并输出运算结果. 测试数据1: 1010011 测试数据 ...

  9. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

最新文章

  1. java-方法。(新手)
  2. 边缘加速创新和AI应用,Xilinx推出Kria自适应系统模块产品组合
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第1章-绪论
  4. STM32 基础系列教程 3 – 外部中断
  5. android开发 常用技巧
  6. iOS.UITableView.SectionIndex
  7. OpenCV环境搭建(一)
  8. TensorFlow tf.keras.losses.CategoricalCrossentropy
  9. C#.Net工作笔记019---葡萄城控件FlexGrid自定义风格_比如给某列设置某个颜色_该颜色不受选择行的影响
  10. HAProxy+Hive构建高可用数据挖掘集群
  11. eureka依赖导入失败以及eureka中没有@EnableEurekaServer异常
  12. linux shell 子进程结束,关于linux:如何终止以shell = True启动的python子进程
  13. centos下通过conda安装pytorch
  14. 7-28 求矩阵的局部极大值 (15 分)
  15. php如何触发html,html想触发php函数可以吗?
  16. David Pozar 微波工程读书笔记(二)
  17. STM32自学笔记-8-红外遥控
  18. 谷歌浏览器flash被禁用解决方法
  19. 智能访客机成大厦智能办公的亮点
  20. winforms 文本框_在禁用的VB.Net WinForms文本框中自定义颜色的新方法

热门文章

  1. 算法设计—磁带最大利用率问题
  2. 基带、射频,到底是干什么用的?
  3. 优思学院|10个品质管理的原则
  4. 论CyberVein在新型智慧城市建设中的应用现状,让智慧城市不再“乌托邦”
  5. [系统分享]Windows 10 家庭中文版 纯净无捆绑
  6. 什么是Hybrid混合器件,如何应用?
  7. CENTOS7.6在台式机安装网卡驱动
  8. Android 前沿UI
  9. 小白学小程序需要的JavaScript知识点
  10. 计算机专业比选英语作文,公路三跨预应力连续梁桥设计(40m+60m+40m)任务书