链表归并与并集相关算法题

两递增归并为递减到原位

假设有两个按元素递增次序排列的线性表,均以单链表形式存储。将这两个单链表归并为一个按元素递减次序排列的单链表,并要求利用原来两个单链表的节点存放归并后的单链表

算法思想

因为两链表已按元素值递增次序排列,将其合并时,均从第一个节点起进行比较,将小的链入链表中,同时后移链表工作指针
要求结果链表按元素值递减次序排列,在归并的同时,将链表节点逆置
![[Pasted image 20241110144022.png]]

将la断开,置为NULL
![[Pasted image 20241110144109.png]]

cura和curb开始遍历,取小的头插,相当于逆置
cura<curb,
用next保存cura的下一个节点
![[Pasted image 20241110144251.png]]

将cura的next指向la的next,即NULL
![[Pasted image 20241110144344.png]]

la的next指向cura
![[Pasted image 20241110144407.png]]

cura指向next
![[Pasted image 20241110144430.png]]

完成头插

LinkList Union(LinkList la, lb)
{// cura和curb分别是链表A和B的工作指针,next保存下一个节点LNode* cura = la->next, *curb = lb->next, *next;la->next = NULL;      // la作结果链表的头指针,先将结果链表置为NULLwhile (cura && curb){if (cura->data <= curb->data){// 将cura的后继节点存于nextnext = cura->next;// 将cura节点链于结果表中,同时逆置cura->next = la->next;la->next = cura;// 恢复cura为当前待比较节点cura = next;}else{next = curb->next;curb->next = la->next;la->next = curb;curb = next;}}// 将la表剩余的部分链入结果表,并逆置// 两个while只能运行一个while (cura){next = cura->next;cura->next = la->next;la->next = cura;cura = next;}while (curb){next = curb->next;curb->next = la->next;la->next = curb;curb = next;}return la;
}

b表归并到a表

设有两个无头节点的单链表,头指针分别为ha,hb,两链表的数据都按递增次序存放,现要求将hb表归并到ha表中,且归并后ha仍为递增,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏

算法思想

由于无头节点,为方便建立头节点,最后删掉
数据相同的节点,不合并到结果链表中
hb表不能被破坏,即要归并的时候,要创建新节点

申请头节点la指向ha的头节点,cura和curb分别指向ha和hb的第一个节点,prev指针指向cura的前一个节点
![[Pasted image 20241110230637.png]]

cura和curb向后遍历,如果cura小于curb
prev的next指向cura,prev指向cura,cura指向它的下一个
![[Pasted image 20241110230831.png]]

如果cura大于curb
malloc一个new节点,使得new的data等于curb的data
![[Pasted image 20241110231033.png]]

prev的next指向new,prev指向new,curb指向它的下一个节点
![[Pasted image 20241110231213.png]]

如果cura等于curb
cura链入结果链表,curb继续往后遍历

LinkList Union(LinkList ha, hb)
{// 申请头节点,以便操作LinkList la;la = (LinkList)malloc(sizeof(LNode));la->next = ha;// cura时ha链表的工作指针LNode* cura = ha;// curb时hb的工作指针LNode* curb = hb;// prev指向当前待合并节点的前驱LNode* prev = la;while(cura && curb){// 处理ha中的数据if (cura->data < curb->data){prev->next = cura;prev = cura;cura = cura->next;}// 处理hb中的数据else if (cura->data > curb->data){// 申请空间LNode* new = (LNode*)malloc(sizeof(LNode));// 将新节点链入结果链表			new->data = curb->data;prev->next = new;prev = new;// 链表中工作节点后移curb = curb->next;}// 处理cura->data == curb->dataelse{// 只要ha的数据prev->next = cura;prev = cura;cura = cura->next;// 不要hb的数据curb = curb->next;}}// 将两链表中剩余部分链入结果链表if (cura)prev->next = cura;if (curb)prev->next = curb;// 释放头节点free(la);return ha;
}

两递减归并到新链表

已知头指针分别为la和lb的带头节点的单链表中,节点按元素值非递减有序排列。
将la和lb两链表归并成一个节点按元素值非递减有序排列的单链表,头指针为lc

LinkList Union(LinkList &la, &lb)
{LNode* cura = la->next, curb = lb->next;LinkList lc = (LinkList)malloc(sizeof(LNode));LNode* curc = lc;while (cura && curb){if (cura->data < curb->data){curc->next = cura;curc = cura;cura = cura->next;}else{curc->next = curb;curc = curb;curb = curb->next;}}if (cura)curc->next = cura;if (curb)curc->next = curb;free(la);free(lb);return lc;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议

自从YY、六间房开启国内聊天室和秀场等网红盛行的网络红利时代以来&#xff0c;紧随其后国内各大音视频平台相应出现&#xff0c;先有映客花椒等直播平台的风头正劲&#xff0c;后有功能板块更丰富的头条抖音Tiktok等&#xff0c;盈利功能点不仅仅有直播PK连麦等礼物打赏功能&a…

C++ 【STL容器系列(一)】vector的使用

1.介绍 vector是STL中的容器之一&#xff08; STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。&#xff09;&#xff0c;STL的容器有非常多&#x…

机器学习5_支持向量机_原问题和对偶问题——MOOC

目录 原问题与对偶问题的定义 定义该原问题的对偶问题如下 在定义了函数 的基础上&#xff0c;对偶问题如下&#xff1a; 综合原问题和对偶问题的定义得到&#xff1a; 定理一 对偶差距&#xff08;Duality Gap&#xff09; 强对偶定理&#xff08;Strong Duality Theo…

华为eNSP:mux-vlan

一、什么是mux-vlan&#xff1f; Mux-vlan 是一种多路复用的虚拟局域网&#xff08;Virtual Local Area Network&#xff09;技术。它将多个不同的VLAN流量转发到同一个物理端口&#xff0c;从而实现VLAN间的互通。 在传统的以太网环境中&#xff0c;每个VLAN通常都有一个独立…

YOLOPv2论文翻译

YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception 摘要 在过去的十年中&#xff0c;多任务学习方法在解决全景驾驶感知问题方面取得了令人鼓舞的成果&#xff0c;既提供了高精度又具备高效能的性能。在设计用于实时实际自动驾驶系统的网络时&#xff0c;这…

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后&#xff0c;也许会疑惑整形数组要如何拷贝&#xff0c;而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数&#xff0c;可以按字节拷贝任意类型的数组&#xff0c;比如整形数组。 …

Matlab轻松烟雾检测

小编经验分享&#xff1a;如何使用Matlab进行烟雾检测 烟雾检测是一项重要的安全技术&#xff0c;它可以帮助我们及时发现火灾风险并采取相应的措施。在这篇文章中&#xff0c;小编将和大家分享如何使用Matlab进行烟雾检测的经验。希望这些经验对大家在实际应用中能够有所帮助…

【Linux系统编程】基础IO--内存文件

目录 前言&#xff1a; stdin&& stdout && stderr Linux文件操作之系统调用 打开文件 关闭文件 写入文件 读取文件 文件描述符fd fd的分配规则与重定向原理 理解用户级缓冲区 前言&#xff1a; 在往期博客《Linux基础概念》中&#xff0c;我们聊…

Python urllib

Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。url…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1&#xff1a;变色 2.2.2 情况2&#xff1a;单旋变色 2.2…

丹摩征文活动|AIGC实践-基于丹摩算力和CogVideoX-2b实现文生视频

一、CogVideoX简介 CogVideoX 是由智谱AI开源的新一代视频生成模型&#xff0c;属于大型语言模型在多模态应用中的重要突破。CogVideoX-2b 版本在参数规模和推理速度上进行了优化&#xff0c;支持视频从文本描述生成&#xff0c;并进一步提升了视频的分辨率和流畅度。相比于上…

麦当劳自助点餐机——实现

餐厅自助点餐优点 1. 降低服务成本&#xff1a; - 减少了对服务员数量的需求&#xff0c;降低了人力成本。 - 减轻了服务员的工作负担&#xff0c;使其能够更专注于提供优质的服务&#xff0c;如解决顾客的特殊需求和处理复杂问题。 2. 提升点餐效率和准确性&#xf…

Linux【基础篇】T

如何安装Linux操作系统&#xff1f; 1.直接把笔记本的Windows干掉&#xff0c;单独安装Linux系统&#xff08;初学者对于Linux使用还是比较苦难&#xff09;。 2.可以安装双系统&#xff08;开机也是命令行&#xff09;&#xff0c;电脑配置要高。 3.可以安装虚拟机。 --如果…

Linux操作系统之软件安装与包管理器工具

一、实验目的 1、掌握常用的软件包管理器RPM、YUM的使用&#xff1b; 2、掌握内网YUM源的配置方法。 二、实验环境 1台PC、VMware虚拟机、2个CentOS7操作系统 三、实验步骤及内容 1、使用RPM软件包管理器安装软件 (1)从阿里云https://mirrors.aliyun.com/下载CentOS7操作…

贯穿式学习MySQL

注&#xff1a;MySQL版本众多&#xff0c;本次讲述的内容以MySQL8.0.34版本为准 范式化设计 范式具体是用来干嘛的&#xff1f; 我们在设计关系数据库时&#xff0c;要遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&#xff0c;这些不同的规范要求被称为不同的范式…

web——[SUCTF 2019]EasySQL1——堆叠注入

这个题主要是讲述了堆叠注入的用法&#xff0c;来复现一下 什么是堆叠注入 堆叠注入&#xff1a;将多条SQL语句放在一起&#xff0c;并用分号;隔开。 1.查看数据库的名称 查看数据库名称 1;show databases; 发现有名称为ctftraining的数据库 2.对表进行查询 1;show tabl…

「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件

本篇将带你实现一个自定义评分星级组件&#xff0c;用户可以通过点击星星进行评分&#xff0c;并实时显示评分结果。为了让界面更具吸引力&#xff0c;我们还将添加一只小猫图片作为评分的背景装饰。 关键词 UI互动应用评分系统自定义星级组件状态管理用户交互 一、功能说明 …

发布 VectorTraits v3.0(支持 X86架构的Avx512系列指令集,支持 Wasm架构及PackedSimd指令集等)

文章目录 支持 X86架构的Avx512系列指令集支持Avx512时的输出信息 支持 Wasm架构及PackedSimd指令集支持PackedSimd时的输出信息VectorTraits.Benchmarks.Wasm 使用说明 新增了向量方法支持 .NET 8.0 新增的向量方法提供交织与解交织的向量方法YGroup3Unzip的范例代码 提供重新…

分布式数据库中间件mycat

MyCat MyCat是一个开源的分布式数据库系统&#xff0c;它实现了MySQL协议&#xff0c;可以作为数据库代理使用。 MyCat(中间件)的核心功能是分库分表&#xff0c;即将一个大表水平分割为多个小表&#xff0c;存储在后端的MySQL服务器或其他数据库中。 它不仅支持MySQL&#xff…

操作系统学习笔记-3.2虚拟内存

文章目录 虚拟内存请求分页管理方式页面置换算法最佳置换算法工作原理OPT 算法的示例最佳置换算法的优点和缺点 先进先出置换算法最近最久未使用时钟置换算法时钟置换算法的工作原理&#xff1a;算法的步骤&#xff1a; 改进型时钟置换算法改进型时钟置换算法的特点&#xff1a…