有序单链表的归并算法
本算法没有利用L1,L2链表的结点,而是通过复制方式新建L3的所有结点,这样没有破坏原有的L1 和L2单链表。
本算法的实质就是尾插法建立单链表
思路:
1.让两个指针p.q 先指向两个单链表的首结点。并定义尾指针r,和s
2.建立L3的头结点,并将r指向L3的尾结点
3.通过while循环判断
3.1如果p->data < q->data,则复制p结点得到s结点,然后将s结点链接到 L3的末尾
3.2 如果p->data > q->data,则复制q结点得到s结点,然后将s结点链接到 L3的末尾
4.无论p或q,我们统一用p来处理
5.最后将其中没有遍历的表余下的结点复制到L3中
6.尾结点next域置空
C代码实现:
void Merge(LinkList * L1,LinkList * L2,LinkList *&L3){LinkList * p = L1->next,*q = L2->next,*r,*s;L3 = (LinkList *)malloc(sizeof(LinkList));r = L3;while(p != null && q != null){if(p->data > q->data){s = (LinkList *)malloc(sizeof(LinkList));s->data = p->data;p = p->next;r->next = s;r = s;}else{s = (LinkList *)malloc(sizeof(LinkList));s->data = q->data;q = q->next;r->next = s;r = s;}if(q != null) p = q;while(q != null){s = (LinkList *)malloc(sizeof(LinkList));s->data = p->data;p = p->next;r->next = s;r = s;}r->next = null;}
}
有序单链表的归并算法相关推荐
- 单链表的归并算法思路总结
刚在练习的时候需要将两个递增有序的单链表进行归并处理,之前碰到这种问题,心里总是有些害怕,害怕自己不能完全考虑到所有的情况,怕自己想不明白里面的流程,怕自己做不到... 但是,我慢慢理解并深以为然的是 ...
- 两个有序单链表的合并排序算法
设计两个有序单链表的合并排序算法 ListList MergeList(LiskList La, LinkList Lb){Lnode *pa = La->next;Lnode *pb = Lb ...
- c语言递增20,2020-07-20(C语言)数据结构-在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素...
//在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素,例如:(7,10,10,21,30,42,42,51,70)将变为(7,10 ...
- 在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素。
在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素.例如(7,10,10,21,30,42,42,42,51,70)将变为(7, ...
- 小白算法积累——单链表13#带头结点单链表+就地归并+改序
题目:假设有两个按元素值递增次序排列的线性表,均以单链表的形式存储.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表. 关键字:带头结点 ...
- 合并两个有序单链表,使得合并后的链表仍然有序
在<剑指offer>里有一道笔试面试题:合并两个有序单链表,使得合并后的链表仍然有序.书中巧妙的利用了递归方法实现了该函数功能. 显然,利用递归算法能够让代码看起来非常简洁且容易看懂,但如 ...
- 两个有序单链表的并交差运算
/*实验2.6:求集合(有序单链表表示)的并.交和差运算*/ #include<iostream> #include<malloc.h> using namespace std ...
- LeetCode Merge k Sorted Lists(有序单链表数组的合并)
题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution {private ListNod ...
- 链表题目---3 合并两个有序单链表 和 分割链表
合并两个有序单链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *nex ...
最新文章
- [译]怎样用VisualStudio查看非托管代码
- linux,mac,unix 系统下cd 进入有空格的目录或者打开有空格的文件
- php 开启命令模式,如何启用PhpStorm中的命令行工具
- 【API进阶之路】因为不会创建云服务器,我被实习生摆了一道
- 《统计学习方法》的Python 3.6复现,实测可用
- Nginx编译-安装-配置-优化实践总结
- MSSQL Server 2008 功能
- JAVA 8 :从永久区(PermGen)到元空间(Metaspace)
- python操作模拟器多开操作_窗口多开模拟器同步操作器▲按键精灵脚本▲
- java中正则验证邮箱手机格式
- select函数使用细节
- java 多音词语转拼音_一种多音字汉字转拼音全拼的方法与流程
- 服务器无线通信方案,无线数据传输模块组网及功能
- java 1 20内奇数的乘积_计算所有奇数的乘积
- 如何在SQL Server中创建是/否布尔字段?
- 批量下载bilibili视频
- 莱西姆大学计算机专业,菲律宾的大学排名是根据什么指标排的
- SpringBoot数据库访问异常HikariPool-1 - Exception during pool initialization.
- 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)
- 一个苦逼运维工程师的年终总结-逗哥