题意:
令L1 = (X1,X2,X3,X4…Xn), L2 = (y1,y2,y3,y4…ym);是两个线性表。采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下:
L3 = (X1,Y1,X2,Y2,X3,Y3,…XmYm,Xm+1,…Xn) 当m<= n
L3 = (X1,Y1,X2,Y2,X3,Y3,…XnYn,Yn+1,…Ym) 当n<= m
L3采用单链表存储。

单链表的存储结构:

typedef struct LinkList{int data;LinkList * next;}

分析:
这里是线性表的合并,如何合并呢?
这里有两种情况,分为:
1.破环原有链表
2.不破坏原有链表

这里是采用破环原有链表合并。

那破环原有链表是什么意思呢?
现在有L1.和L2链表,都带有头节点。
1.现在将两个头节点和两者其余部分分开。(画图更好理解)
2.一个头节点作为L3的头节点。另一个头节点释放free。
3.定义两个指针p,q,两者各指向两个链表其余部分,并将进行遍历。

所以,这种操作已经破环了链表。

思路:
1.定义两个指针各指向链表其余部分,定义一个尾指针。释放L2
2.通过while循环,条件为p!=null&&q!=null,再循环体中,将各自节点插入L3头节点后,各自遍历。
3.当等长节点遍历结束后,将多余部分链接到L3后,此时不知道是谁,先结束,但是,不管是q还是p,这里统一用p指向。
(如果两者等长,则刚好结束,r->next = null)
4.多余部分连接(r->next = p)

C代码实现:

void Merge1(LinkList * L1,LinkList * L2,LinkList *&L3){LinkList * p = L1->next,*q = L2->next,*t; //尾指针L3 = L1;r = L3;free(L2);while(p!=null && q!=null){r->next = p;t = p;p=p->next;r->next = q;t = q;q =q->next;}r->next = null; //如果两者刚好等长,刚好结束!if(q!=null)p = q; //统一p处理r->next = p; //连接其余节点}

单链表-两个线性表的合并1(破环原链表+尾插法)相关推荐

  1. 单链表-两个线性表的合并(不破坏原链表+尾插法)

    题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...

  2. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表

    http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...

  3. java实现单链表的建立(头插法和尾插法)

    单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...

  4. C语言-链表的创建头插法和尾插法(有无头节点)

    文章目录 结构声明 1 头插法(有头节点) 2 头插法(无头节点) 3 尾插法(有头节点) 4 尾插法(无头节点) 结构声明 typedef int ElementType;typedef struc ...

  5. 单链表-单链表拆分为两个线性表(尾插法+尾插法)

    题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...

  6. 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】

    这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...

  7. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  8. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

  9. C++头插法尾插法建立单链表,合并两个有序单链表

    A和B是两个单链表(带表头结点),其中元素递增有序.设计一个算法,将A和B归 并成一个按元素值非递减有序的链表 C,C由A 和B 中的结点组成. #include<iostream> #i ...

最新文章

  1. POJ 3615 floyd 求任意起点终点的最短路
  2. ArcGIS桌面基本操作 和 ArcSDE数据库基本概念
  3. Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
  4. [Redux/Mobx] Redux中异步action和同步action最大的区别是什么?
  5. stl make_heap_通过使用make_heap()创建堆| C ++ STL
  6. CentOS/Ubuntu制作自动安装arm iso镜像
  7. centos安装飞信最新版
  8. python如何对文件进行批量命名-利用Python对文件批量重命名
  9. java Context类
  10. Hello China操作系统的安装和使用
  11. Confluence 6 配置草稿保存的时间
  12. 最实用的自媒体爆文采集工具,简单易出爆文
  13. 数据结构顺序表基本操作(C/C++实现)
  14. docker容器网络通信原理分析
  15. 单目深度估计--深度学习篇
  16. SSL协议密钥交换过程理解
  17. Unity设置字体颜色渐变
  18. GHUB LUA脚本 压枪脚本 推荐APEX用
  19. UAP:SECURITY PROTOCOL IN/OUT Command
  20. 线性规划的对偶问题(The Dual of LP)

热门文章

  1. 如何用Python画一朵太阳花
  2. java基础(十)-----Java 序列化的高级认识
  3. GitHub Checks API帮助应用实现进一步的持续集成
  4. .Net转Java自学之路—基础巩固篇一
  5. jvm两种方式获取对象所占用的内存
  6. MySQL数据库启动报The server quit without updating PID file
  7. 在Linux上限制远程登陆的IP
  8. 取没有date的邮件发送时间
  9. mysql数据库,删除root用户后恢复
  10. WindowsPhone基础琐碎总结-----数据绑定(一)