已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中

已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中。

代码思路:
我们创建一个辅助链表L3,用于存储L1和L2链表的交集,用s遍历L3各个元素

用p和q分别遍历链表L1和L2,因为是两个链表都是递增的,所以每次比较p和q结点那个元素更小,更小的往后移。如果p和q指向结点大小一样,则把它们记录到s中。

过程示意图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

最后当某个链表遍历结束,循环也可以结束了,因为一个链表后面没东西了,咋能和另一个链表有交集呢?

然后题目要求把交集放在L1中,所以把L3的复制进去即可。

//两个递增链表,求交集
void JiaoJi(LinkList* L1, LinkList* L2) {
	LNode* p = (*L1)->next;//用p遍历L1
	LNode* q = (*L2)->next;//用q遍历L2
	
	LinkList L3 = (LNode*)malloc(sizeof(LNode));//辅助链表,用于存放公共元素
	LNode* s = (LNode*)malloc(sizeof(LNode));//用s遍历L3
	L3->next = s;

	LNode* pre = L3;//记录s前一个位置
	while (p&&q) {

		if (p->next == NULL || q->next == NULL) {//下一轮退出循环,记录当前s位置
			pre->next=NULL;
		}

		if (p->data == q->data) {
			LNode* tmp = (LNode*)malloc(sizeof(LNode));
			tmp->next = NULL;
			s->data = p->data;
			s->next =tmp;
			s = s->next;
			p = p->next;
			q = q->next;

			pre = pre->next;
		}
		else if (p->data > q->data) {
			q = q->next;
		}
		else {
			p = p->next;
		}
	}
	
	

	s = L3->next;//s复位
	p = (*L1)->next;//p复位
	LNode* tmp = (LNode*)malloc(sizeof(LNode));
	while (s!=NULL) {//因为L3是L1和L2的交集,所以L3的长度是一定小于等于L1的,这里判断条件给一个s即可
		if (s->next == NULL) {//出循环的前一个,记录一下此时的p位置
			tmp = p;
		}
		p->data = s->data;
		p = p->next;
		s = s->next;
	}
	tmp->next = NULL;//把L1后面的非交集部分断掉
}
int main() {
	LinkList L1;
	LinkList L2;
	InitList2(&L1);//初始化一个1 2 3 4 5 6 7 8 9 10的带头结点链表L1
	InitList3(&L2);//初始化一个4 5 6 7 8 9的带头结点链表L2

	printf("初始L1为:");
	print2(L1);
	
	printf("\n");
	
	printf("初始L2为:");
	print2(L2);
	
	printf("\n");
	
	JiaoJi(&L1, &L2);
	printf("L1和L2交集为:");
	print2(L1);

	return 0;
}

在这里插入图片描述
注:初始化带头单链表和打印函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#include<malloc.h>
//单链表定义
//链表结点
int A[10] = { 1,2,3,4,5,6,7,8,9,10 };
int B[6] = { 4,7,8,9,11,13 };//4,7,8,9,11,13
typedef struct {//定义单链表结点类型
	int data;//数据域
	struct LNode *next;//指针域
}LNode, *LinkList;


//带头结点初始化-尾插法
void InitList2(LinkList* L) {
	(*L) = (LNode*)malloc(sizeof(LNode));
	(*L)->next = NULL;
	LNode* rear = (*L);//标记表尾
	int i = 0;
	for (i = 0;i < 10;i++) {
		LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点
		p->data = A[i];//新结点赋值
		rear->next = p;//接到L上
		rear = p;//标记表尾
	}
	rear->next = NULL;
}

//带头结点初始化-尾插法
void InitList3(LinkList* L) {
	(*L) = (LNode*)malloc(sizeof(LNode));
	(*L)->next = NULL;
	LNode* rear = (*L);//标记表尾
	int i = 0;
	for (i = 0;i < 6;i++) {
		LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点
		p->data = B[i];//新结点赋值
		rear->next = p;//接到L上
		rear = p;//标记表尾
	}
	rear->next = NULL;
}

void print2(LinkList L) {//打印带头结点的链表
	LNode* i = L->next;//用i指针遍历整个链表
	while (i != NULL) {
		printf("%d ", i->data);
		i = i->next;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/195838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见加密算法

常见加密算法 加密算法是一种用数学方法对数据进行变换的技术&#xff0c;目的是保护数据的安全&#xff0c;防止被未经授权的人读取或修改。加密算法可以分为三大类&#xff1a;对称加密算法、非对称加密算法和哈希算法&#xff08;也叫摘要算法&#xff09;。 哈希算法 哈…

C++之STL库:string类(用法列举和总结)

前言 大家在学习STL库的时候一定要学会看英文文档&#xff0c;俗话说熟能生巧&#xff0c;所以还得多练&#xff01;在使用string类之前&#xff0c;要包含头文件#include <string>和using namespace std; 文档链接&#xff1a;string - C Reference 一、string——构造…

简易版扫雷+代码分析

前言&#xff1a; 实验一个简易版的扫雷&#xff0c;也要两百来行的代码&#xff0c;因此为了代码整洁&#xff0c;维护起来方便&#xff0c;这里我们和前期实现的三子棋一样&#xff0c;也弄一个游戏的头文件game.h用来装各种头文件以及函数的声明以及宏定义、预处理信息&…

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…

Ubuntu18.04磁盘取证-中难度篇

涉及的镜像文件&#xff1a; sdb.vhd uac.tar ubuntu.20211208.mem 需要利用的工具&#xff1a; volatility3 volatility2.6.1 FTK/Autopsy Strings 题干 容器是一个Ubuntu Linux 蜜罐&#xff0c;用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。 您将看到一个 cr…

食品行业研发知识管理:企业网盘的选择与优势

食品行业为了自身的发展都会有自己的研发中心&#xff0c;研发中心是一种知识密集型组织&#xff0c;为了提高研发能力、培养人才、加快创新速度&#xff0c;需要一一个安全统一的研发知识管理平台。食品行业可以使用Zoho WorkDrive企业网盘来作为自己的研发知识管理平台&#…

Java之面向对象《ATM自动取款机》

一、前言&#xff1a; 关于上次我写的博客文章中"Java之《ATM自动取款机》(面向对象)"&#xff0c;里面还不够完善&#xff0c;因为在各个服务功能相互跳转时&#xff0c;会出现混乱问题。这次我对其进行了修改和改进&#xff0c;若还有其它在大家测试时出现的bug请及…

Python3 Linux 安装教程

1. windows安装 去Python官网下载windows安装包&#xff0c;按照安装向导一直点击下一步即可&#xff0c;安装向导最好勾选Add Python3.x to PATH&#xff0c;这样就不用手动添加环境变量了。 2. linux安装 linux安装比较复杂&#xff0c;需要安装一些系统依赖&#xff0c;再…

认证授权常见方式

认证授权 认证 (Authentication) 和授权 (Authorization)的区别是什么&#xff1f; 说简单点就是&#xff1a; 认证 (Authentication)&#xff1a; 你是谁。授权 (Authorization)&#xff1a; 你有权限干什么。 稍微正式点&#xff08;啰嗦点&#xff09;的说法就是&#x…

创建JDK8版本的SpringBoot项目的方法

目录 一.通过阿里云下载 二.通过IDEA创建 1.下载安装JDK17 2.创建SpringBoot 3.X的项目 3.把JDK17改成JDK8 截止到2023.11.24&#xff0c;SpringBoot不再支持3.0X之前的版本&#xff0c;3.0X之后的版本所对应的JDK版本为JDK17&#xff0c;下面介绍如何在idea上继续使用JDK…

vue 表格虚拟滚动

参考未整理 1.使用vxetable实现 官网 问题&#xff1a; 实现了表格的虚拟滚动&#xff0c;但是单元格数据不自动换行了 &#xff0c;如下显示的... 然后在官网看到是这样的&#xff0c;那我不是白写。。。 解决&#xff1a; 1.包一层div2.再写个换行样式 <vxe-column …

营销软文怎么写,媒介盒子分享

企业营销落地过程中&#xff0c;高质量的营销文案创作是很多企业的难题&#xff0c;这就导致公司可能投入了大量成本却很难看到回报&#xff0c;今天媒介盒子就来分享&#xff1a;如何打造高质量营销软文。 一、 选题具有吸引力 文案选题等于支撑点&#xff0c;想要写出高质量…

【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用

文章目录 一. Hive Architecture二. Metastore1. Metastore Architecture2. Metastore Interface 三. Compiler四. hive架构小结 本文主要讨论了 描述了hive架构&#xff0c;hive主要组件的作用详细描述了hsql在hive执行过程中的底层细节描述了hive各组件作用 一. Hive Archite…

Android12之logcat日志显示颜色和时间(一百六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

UTONMOS:元宇宙时代已经来临

当我们站在这个新的人工智能时代的十字路口&#xff0c;不可避免地要面对一个问题&#xff1a;在这个技术革新的大潮中&#xff0c;区块链技术还有没有生存和发展的空间&#xff1f;本文将深入探讨这个问题&#xff0c;分析区块链在人工智能时代的优势、挑战以及未来的可能性。…

森林防火气象监测系统守护绿色家园的智能防线

随着全球气候变暖的日益加剧&#xff0c;森林防火已经成为了刻不容缓的任务。为了更好地守护我们的绿色家园&#xff0c;WX-SL10 森林防火气象监测系统应运而生。 森林防火气象监测系统的重要性 森林防火气象监测系统是一种集成了气象观测、数据传输、数据分析与预警等多功能…

NocoBase企业级低代码开发平台有什么优势?

企业级低代码开发平台&#xff0c;作为一种新兴的技术解决方案&#xff0c;正逐渐在企业中受到越来越多的关注和青睐。它以其高效、灵活的特性&#xff0c;为企业的创新提供了更快速、更可持续的支持和推动。 低代码开发平台是一种以图形化界面为基础&#xff0c;结合拖拽式编…

稳定扩散模型的隐空间探索

生成图像模型学习视觉世界的“潜在流形”&#xff1a;每个点映射到图像的低维向量空间。 从流形上的这样一个点回到可显示的图像称为“解码”—在稳定扩散模型中&#xff0c;这是由“解码器”模型处理的。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器…

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目&#xff1a; https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下&#xff0c;make编译一下才会产生exp.so文件&#xff0c;后面再利用这个exp.so文件进行远程代码执行 需要p…

璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品&#xff0c;凭借优秀的产品技术能力&#xff0c;通过评估后&#xff0c;入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》的工业数字化领域。 “铸基计划”是中国信通院…