采用单链表存放有序表时的归并算法:
和上面那个问题一样 , 同样的思路 ,不多赘述了 ,区别就是 遍历两个链表的指针不一样 ,插入的赋值操作不一样 , 其他的算法思路都是一样的, 下面直接上代码:
//传入单链表LA,LB,和创建的链表LCvoid UnionList1(LinkList *LA, LinkList*LB , LinkList *&LC){//定义指向LA和LB的指针 LinkList *pa = LA ->next, *pb = LB->next;//构建链表C的头结点 , 我们把LA和LB的新元素插入到LC 需要利用尾插法,//尾插法需要尾指针定位到LC的最后一个节点LinkList *r; //指向LC的尾结点的指针LinkList *s; //向LC的新节点的指针LC = (LinkList *)malloc(sizeof(LinkList));//刚开始,尾指针指向LC的头结点,LC的尾指针置空 r=Lc;LC->next = NULL;//下面开始插入://LA 和 LB 均未到达末尾时,泽其小优先尾插while(pa!=NULL && pb !=NULL){//为了不破坏LA和LB,要另起灶炉,构建新节点s = (LinkList *)malloc(sizeof(LinkList));//如果指向LA的指针的数据小于LB的指针数据, 就把La的指针pa 数据赋值给新节点数据if(pa->data < pb -> data){s->data = http://www.kingceram.com/post/pla ->data;//LA指针后移pa = pa ->next;//对LC进行尾插法r ->next=s;r=s;}else //同理:{s->data = http://www.kingceram.com/post/pb->data;//LB指针后移pb = pb->next;//对LC进行尾插法r ->next=s;r=s;}}//经过上一步的交替插入,要么两个表交替插入完了,要么是下面两者之一//LB已经扫描插入完了, LA尚未扫描插入完 , 将其余元素插入到 Lc中while(pa!=NULL){s = (LinkList *)malloc(sizeof(LinkList));//LA指针送给的数据指向新节点s->data = http://www.kingceram.com/post/pa->data;//下面开始头插法r->next = s;r = s;//LA指针后移pa = pa ->next;}//LA已经扫描插入完了, LB尚未扫描插入完 , 将其余元素插入到 Lc中while(pb!=NULL){s = (LinkList *)malloc(sizeof(LinkList));//LA指针送给的数据指向新节点s->data = http://www.kingceram.com/post/pb->data;//下面开始头插法r->next = s;r = s;//LB指针后移pb = pb ->next;}}
- 基于POI和easyexcel实现excel文件读写-多列表加下拉选项框
- C语言:Hash表查找字符串内容
- Hash表的实现——拉链法
- 有序表删除重复元素
- 33朵玫瑰代表什么意思
- 三十三 算法数据结构----有序表
- 昆虫备忘录怎么写
- wink表情包是什么意思
- 前端使用puppeteer 爬虫生成《React.js 小书》PDF并合并
- 如何把excel表的联系方式导入到手机