7-3 两个有序链表序列的交集 (20 分)

时间: 2023-05-31 09:18:48 浏览: 143
### 回答1: 题目描述 给定两个递增排序的链表,本题要求将两个链表中相同的元素输出为新的递增排序链表。 输入格式 输入分别在两行中给出两个递增排序的链表,每个链表的格式为: 第一行:N1 v1->v2->…->vN1 第二行:N2 w1->w2->…->wN2 其中N1和N2(≤N1,N2≤10^5)是链表长度,vi和wi(−10^9≤vi,wi≤10^9)分别是链表中的元素。链表结点的地址从第1到N1/N2编号。 输出格式 在一行中输出两个输入链表的交集,按递增排序。若无交集则输出NULL。 输入样例1 3 1->2->3 5 1->2->3->4->5 输出样例1 1->2->3 输入样例2 3 1->3->5 5 2->4->6->8->10 输出样例2 NULL 算法1 (链表遍历) $O(n)$ 1.将两个链表遍历一遍,将相同的元素存储在一个新的链表中。 2.将新的链表按递增排序。 时间复杂度 两个链表遍历一遍,时间复杂度为O(n)。 C++ 代码 算法2 (双指针) $O(n)$ 1.将两个链表遍历一遍,将相同的元素存储在一个新的链表中。 2.将新的链表按递增排序。 时间复杂度 两个链表遍历一遍,时间复杂度为O(n)。 C++ 代码 ### 回答2: 题目描述: 给定两个升序排列的链表序列A和B,输出A和B的交集,每个元素只输出一次。 输入格式: 输入分为两部分:第一部分是第一个链表的长度N,第二部分是第一个链表的元素;第三部将是第二个链表的长度M,第四部分是第二个链表的元素。每个元素为一个32位有符号整数。 输出格式: 输出分为两部分:第一部分为交集的元素个数K;第二部分为K个整数,表示交集元素。 输入样例1: 5 1 3 4 7 9 4 2 3 5 7 输出样例1: 2 3 7 输入样例2: 5 1 2 3 4 5 5 1 2 3 4 5 输出样例2: 5 1 2 3 4 5 解题思路: 按顺序遍历两个链表A和B,如果A的当前值小于B的当前值,A的指针往后移动,反之则B的指针往后移动。当两个链表当前值相等时,将他们的当前值加入结果集,并分别移动两个指针。 代码实现: ### 回答3: 题目描述: 给定两个递增的有序单向链表序列,找出它们的交集并输出。 思路分析: 由于链表是有序的,所以可以通过比较节点的值来找出它们的交集。创建一个新的链表,每次从两个链表中取出较小的节点,并将它添加到新链表中,直到任意一个链表为空为止,此时新链表即为它们的交集。具体算法如下: 1. 创建一个新的链表 result 2. 定义两个指针,分别指向两个链表的头节点,一个为 l1,一个为 l2 3. 循环遍历两个链表,如果其中一个链表为空,则跳出循环 4. 比较 l1 和 l2 的值,如果 l1 的值小,则将 l1 添加到 result 中,并将 l1 后移一位;否则将 l2 添加到 result 中,并将 l2 后移一位 5. 返回新链表 result 代码实现: struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) { struct ListNode* p1 = headA; struct ListNode* p2 = headB; struct ListNode* result = NULL; struct ListNode* tail = NULL; while (p1 != NULL && p2 != NULL) { if (p1->val < p2->val) { p1 = p1->next; } else if (p1->val > p2->val) { p2 = p2->next; } else { if (result == NULL) { result = tail = (struct ListNode*)malloc(sizeof(struct ListNode)); tail->val = p1->val; } else { tail->next = (struct ListNode*)malloc(sizeof(struct ListNode)); tail = tail->next; tail->val = p1->val; } p1 = p1->next; p2 = p2->next; } } if (tail != NULL) { tail->next = NULL; } return result; } 总结: 本题通过比较两个有序链表的值,能够高效地找出它们的交集。同时,我们还需要注意链表节点的创建和释放,以避免内存泄漏的问题。

相关推荐

最新推荐

recommend-type

基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip

基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip基于Android Studio的个人记账应用帮助用户轻松管理和跟踪他们的财务源码.zip
recommend-type

基于python实现树莓派和传感器的植物生长环境评估信息系统

【作品名称】:基于python实现树莓派和传感器的植物生长环境评估信息系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于python实现树莓派和传感器的植物生长环境评估信息系统
recommend-type

优质资源,Yearning Mysql SQL审核平台

Yearning Mysql SQL审核平台(使用go语言)
recommend-type

c语言课程设计-职工资源管理系统.rar

void displayMenu() { printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); printf("+ 职工资源管理系统 +\n"); printf("+ +\n"); printf("+ 1. 录入职工信息 +\n"); printf("+ 2. 显示全部职工信息 +\n"); printf("+ 3. 根据工号查询
recommend-type

华为OD机试D卷 - 来自异国的客人 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。