单链表-两个线性表的合并1(破环原链表+尾插法)
题意:
令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(破环原链表+尾插法)相关推荐
- 单链表-两个线性表的合并(不破坏原链表+尾插法)
题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...
- java实现单链表的建立(头插法和尾插法)
单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...
- C语言-链表的创建头插法和尾插法(有无头节点)
文章目录 结构声明 1 头插法(有头节点) 2 头插法(无头节点) 3 尾插法(有头节点) 4 尾插法(无头节点) 结构声明 typedef int ElementType;typedef struc ...
- 单链表-单链表拆分为两个线性表(尾插法+尾插法)
题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...
- 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】
这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)
大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...
- C++头插法尾插法建立单链表,合并两个有序单链表
A和B是两个单链表(带表头结点),其中元素递增有序.设计一个算法,将A和B归 并成一个按元素值非递减有序的链表 C,C由A 和B 中的结点组成. #include<iostream> #i ...
最新文章
- POJ 3615 floyd 求任意起点终点的最短路
- ArcGIS桌面基本操作 和 ArcSDE数据库基本概念
- Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
- [Redux/Mobx] Redux中异步action和同步action最大的区别是什么?
- stl make_heap_通过使用make_heap()创建堆| C ++ STL
- CentOS/Ubuntu制作自动安装arm iso镜像
- centos安装飞信最新版
- python如何对文件进行批量命名-利用Python对文件批量重命名
- java Context类
- Hello China操作系统的安装和使用
- Confluence 6 配置草稿保存的时间
- 最实用的自媒体爆文采集工具,简单易出爆文
- 数据结构顺序表基本操作(C/C++实现)
- docker容器网络通信原理分析
- 单目深度估计--深度学习篇
- SSL协议密钥交换过程理解
- Unity设置字体颜色渐变
- GHUB LUA脚本 压枪脚本 推荐APEX用
- UAP:SECURITY PROTOCOL IN/OUT Command
- 线性规划的对偶问题(The Dual of LP)