C语言编程集合A和B的交集,求两个递增链表A和B的交集,并将结果放在链表A中
问题描述:
已知两个链表A和B分别表示两个集合,其元素递增排列。编制函数,求A与B 的交集,并存放于A链表中。
问题解答:
算法思想:釆用归并的思想,设置两个工作指针pa和pb,对两个链表进行归并扫描,只有同时出现在两集合中的元素才链接到结果表中且仅保留一个,其他的结点全部释放。当一个链表遍历完毕后,释放另一个表中剩下的全部结点。
LinkList Union(LinkList &la,LinkList &lb) {
pa=la->next; //设工作指针分别为pa和pb
pb=lb->next;
pc=la; //结果表中当前合并结点的前驱指针
while(pa&&pb){
if(pa->data==pb->data) { //交集并入结果表中
pc->next=pa; //A中结点链接到结果表
pc=pa;
pa=pa->next;
u=pb; //B中结点释放
pb=pb->next;
free(u);
}
else if (pa->datadata) { //若A中当前结点值小于B中当前结点值
u=pa;
pa=pa->next; //后移指针
free(u) ; //释放A中当前结点
}else{ //若B中当前结点值小于A中当前结点值
u=pb;
pb=pb->next; //后移指针
free (u) ; //释放B中当前结点
}
} //while 结束
while(pa){ //B已遍历完,A未完
u=pa;
pa=pa->next;
free (u) ; //释放A中剩余结点
}
while(pb){ //A已遍历完,B未完
u=pb;
pb=pb->next;
free(u) ; //释放B中剩余结点
}
pc->next=NULL; //置结果链表尾指针为NULL
free (lb) ; //释放B表的头结点
return la;
}
链表归并类型的题在各学校历年真题中出现的频率很高,故应扎实掌握此类问题的思想。该算法的时间复杂度为O(len1+len2),空间复杂度为O(1)。
C语言编程集合A和B的交集,求两个递增链表A和B的交集,并将结果放在链表A中相关推荐
- C语言实验(十三):函数(求两个任意分数和的最简形式、将正整数转换为字符串输出、某日期是该年第几天)
C语言实验(十三):函数(求两个任意分数和的最简形式.将正整数转换为字符串输出) 一.任意输入两个分数,用C语言编程求这两个分数和的最简形式.如:输入为"2/6 + 12/9 =" ...
- C语言试题七十三之请编写函数求两个数的最大公约数
1. 题目 编写函数:求两个数的最大公约数. 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自 ...
- C语言(CED)编写一个程序,求两个字符之间的加减运算。
(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 复习C语言,不同的心境遇到了不同的问题: 问题: 编写一 ...
- C语言编程练习:用pow()函数实现求x的y次方的值
C语言 pow() 函数用来求 x 的 y 次方的值. 头文件:math.h 语法/原型: double pow(double x,double y); 参数说明: x:双精度数. y:双精度数. 返 ...
- C语言编程对一个逆波兰式进行求值,算式与逆波兰式
致憨憨的从前 当年,老师布置一道作业:编写一个计算器,要求输入算式,给出结果.算式中只包含+-*/^这几个运算符,算式中不含负数.由于是Python课程,我很快给出了解题方式,如下: while Tr ...
- C 语言编程 — 变量和常量
目录 文章目录 目录 前文列表 变量与常量 变量 变量的类型 变量的声明 变量的定义 变量的初始化与赋值 常量 整型常量 浮点型常量 字符型场景 字符串常量 符号常量 前文列表 <程序编译流程与 ...
- java兔子问题流程图_C语言编程狼追兔子问题代码解析
原标题:C语言编程狼追兔子问题代码解析 问题描述 一只兔子躲进了10个环形分布的洞中的一个.狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞去找:也没有找到,就隔2个洞,到第6个洞去找:以后每次多一 ...
- c语言编程作业最大整数问题,C语言编程第六章作业答案.doc
C语言编程第六章作业答案 1. 输入两个正整数m和n,求其最大公约数和最小公倍数. 辗除法--辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法. ...
- c语言数组判断不及格人数,C语言编程 运用数组求不及格人数
C语言编程题,求数组89,80,95,84,73,84,91,78,87,94的和以及平均值 #includevoid main(){ int a[10]={89,80,95,84,73,84,91, ...
最新文章
- Windows组策略屏蔽U盘有妙法
- 杭电2055 另一种
- RSA公钥文件(PEM)解析
- 2-SAT 问题(洛谷-P4782)
- 16软件1班安卓第二学期学习总结
- php中的list()用法中要注意的地方
- opencart出现no such file or dictionary
- js-JavaScript常见的创建对象的几种方式
- find命令使用及实例
- 生产制造MES系统源码 采购管理模块解析
- JPEG压缩原理详解
- 收图啦!CDEC 2019 北京站 高颜值亮相~~~
- html5统计在线人数,html的统计访客人数的代码?
- Proteus中继电器详解
- node内存溢出:JavaScript heap out of memory
- Memcache教程
- 12、可观测性--告警处理
- 短视频底层实操课,让你迅速从短视频新手变成高手
- NLP从入门到实战(三)
- PMP 项目管理知识框架 - 引子