7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

一:题目

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

输入样例:

1 2 5 -1
2 4 5 8 10 -1

输出样例:

2 5

二:思路

1.首先是储存数据,我用的是尾插法
2.考虑如何找出交集,需要注意的是,题目说的是非降序为(即后一个一定比前一个值大),那么我们在处理交集合的时候,就可以用到了比较元素大小,直接让指针指向后一个,而不用担心前一个会被忽略,因为两个序列均为非降序

三:上码


#include<bits/stdc++.h>
using namespace std;typedef struct Node* Link;
typedef struct Node{int data;Link next;
}nnode;//输入链表(尾插法) 
Link createLink(){Link head = (Link)malloc(sizeof(struct Node));Link rear;rear = head;while(1){int num;cin >> num;if(num == -1)break;Link p = (Link)malloc(sizeof(struct Node));p->data = num;rear->next = p;rear = p; }rear->next = NULL;return head;
}Link newLink(Link L1,Link L2){Link l1 = L1->next;Link l2 = L2->next;//新建一个链表 存的元素为交集Link head = (Link)malloc(sizeof(struct Node));Link rear;rear = head; while(l1 && l2){//题目给出的非降序(即后一个一定比前一个值大) if(l1->data > l2->data){l2 = l2->next;}else if(l1->data < l2->data){l1 = l1->next; }else if(l1->data == l2->data){Link p = (Link)malloc(sizeof(struct Node));p->data = l1->data;rear->next = p;rear = p; l1 = l1->next;l2 = l2->next; //return 0;}	} rear->next = NULL;return head;} void printLink(Link L){Link l = L->next;//头结点并未赋值,所以要用头结点的下一个结点if(l == NULL){cout << "NULL";}int flag = 0;while(l){if(flag == 0)cout << l->data;elsecout << ' ' << l->data;flag = 1;	l = l->next;} 
}int main(){Link L1 = createLink();Link L2 = createLink();Link L3 = newLink(L1,L2);printLink(L3);} 

在这里插入图片描述

四:其他做法的失败码

1:用了vector容器(最后一个点超时)

#include<bits/stdc++.h>
using namespace std;int main(){vector<int>v1,v2,v3;set<int>s[2];set<int>::iterator st;while(1){int temp1;		cin >> temp1;if(temp1 == -1)break;v1.push_back(temp1);}while(1){int temp2;	cin >> temp2;if(temp2 == -1)break;v2.push_back(temp2);}//判断相同的元素int num1 = v1.size() > v2.size() ? v1.size() : v2.size();//求出较大的值int num2 = v1.size() < v2.size() ? v1.size() : v2.size();//求出较小的值for(int i = 0; i < num2; i++){for( int j = 0; j < num1; j++){if(v1[i] == v2[j]){v3.push_back(v1[i]);break;}}}	if(v3.size() != 0){for(int i = 0; i < v3.size(); i++){if(i != v3.size() - 1){cout << v3[i] << ' ';	}else{cout << v3[i];}}}else{cout << "NULL";}} 

2:用了set容器(超时解决了但最后一个测试点 答案错误 吐了)

#include<bits/stdc++.h>
using namespace std;int main(){vector<int>v1,v2,v3;set<int>s[2];set<int>::iterator st;while(1){int temp1;		cin >> temp1;if(temp1 == -1)break;s[0].insert(temp1);}while(1){int temp2;	cin >> temp2;if(temp2 == -1)break;s[1].insert(temp2);}//判断相同的元素for(st = s[0].begin(); st != s[0].end(); st++){if(s[1].find(*st) != s[1].end()){//如果是s[1]容器中没有*t这个元素的话,那么就 v3.push_back(*st);          //返回 s[1].end(); 但现在是 != s[1].end();// 那么的话就是存在*t;							  }} if(v3.size() != 0){for(int i = 0; i < v3.size(); i++){if(i != v3.size() - 1){cout << v3[i] << ' ';	}else{cout << v3[i];}}}else{cout << "NULL";}} 

3:用了map容器(超时解决了但最后一个测试点过不去(答案错误)狗比PTA气死我了)

#include<bits/stdc++.h>
using namespace std;int main(){vector<int>v3;map<int,int>m;map<int,int>::iterator t;while(1){int temp1;		cin >> temp1;if(temp1 == -1)break;m[temp1] = 1;}while(1){int temp2;	cin >> temp2;if(temp2 == -1)break;m[temp2] += 1;}for(t = m.begin(); t != m.end(); t++){if(t->second == 2){v3.push_back(t->first);}}if(v3.size() != 0){for(int i = 0; i < v3.size(); i++){if(i != v3.size() - 1){cout << v3[i] << ' ';	}else{cout << v3[i];}}}else{cout << "NULL";}} 

五:总结

加油BOY! 毕竟这道题人家让用的就是链表,所以还是老老实实用来链表吧!!!!!!!!!!!!!!!!

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

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

相关文章

linux可疑程序,linux可疑程序追踪

今天的主角是旁边的服务器&#xff0c;学姐的Fedora。发生的情况和我的那台ubuntu类似。(看来是一起被黑了)连接虽挡&#xff0c;进程犹在其实昨天已经发现学姐的系统出问题了&#xff0c;采取的措施和我那台一样&#xff0c;iptables直接DROP和可疑IP的连接。今天学姐说&#…

明源云创CI/CD技术演进

源宝导读&#xff1a;在敏捷迭代的过程中需要能够快速的把开发的代码集成打包部署到各个环节对应的环境中。为了高效稳定的完成这个工作&#xff0c;我们引入了DevOps实践理论&#xff0c;并形成了配套的CI/CD工具。本文将介绍云创的CI/CD工具如何演进的过程。一 、传统构建在最…

7-51 两个有序链表序列的合并 (20 分)(vector做法)

一 &#xff1a;题目 、已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff…

linux qt4卸载,linux卸载QT4和安装QT5的方法

由于项目中需要用到QT的程序&#xff0c;因此安装QT5的软件支持库和QT开发环境是必须的&#xff1a;apt-get insatall qt5-defaultapt-get insatall qt-creatorQT5的库和QT Creator开发环境是独立运行的&#xff0c;如果QT Creator缺少QT5的库则程序写好了没法编译&#xff1b;…

7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

一&#xff1a;题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N1)/2⌋个数&#xff08;A 0 ​ 为第1个数&#xff09;。 输入格式: 输入分三行。第一行给出序列的公共长…

Blazor带我重玩前端(五)

概述本文主要讨论Blazor事件内容&#xff0c;由于blazor事件部分很多&#xff0c;所以会分成上下两篇&#xff0c;本文为第一篇&#xff0c;后续会有第二篇。我们可以视组件是一个类&#xff0c;我们先看一下前文所说的Index.Razor页面生成的C#代码。在此&#xff0c;先补充一下…

请问在linux应该如何清除客户端本地dns缓存呢???,linux下清空dns缓存的方法-Ubuntu清空本地dns缓存...

linux Ubuntu下清空dns缓存的方法linux 设置Ubuntu DNS缓存&#xff0c;加速打开网页的速度大多数的 DNS 客户端会把域名解析的结果缓存到本地&#xff0c;这样可以提升对于同一个地址的访问速度。当您打开一个单页面的时候&#xff0c;通常会有多次对同一个域名的访问请求。基…

关于TensorFlow开发者证书,你想要的资源都在这里!

今天是TensorFlow开发者证书的一个里程碑&#xff0c;全球已经有500位开发者通过考试并顺利拿到了 TensorFlow Certificate。我也有幸在各位大佬的指点下&#xff0c;顺利通过考试&#xff0c;成为国内第7位拿到 TensorFlow Certificate 的开发者。按照Google官网的数据&#…

java中nextLine(),读取换行符的解决

一&#xff1a;问题描述 当输入完第一值后&#xff0c;就未能输入后来的字符串 package com.wyj.two;import java.util.Scanner;public class text {public static void main(String[] args) {Scanner in new Scanner(System.in);int temp in.nextInt();System.out.println…

linux 从不兼容的指针类型,警告:从不兼容的指针类型初始化

大家好&#xff0c;我已经触摸C了&#xff0c;所以我真的生锈了。我写了一个小程序来创建一个使用两个动态数组的矩阵。但是&#xff0c;我收到这个警告&#xff0c;我不明白为什么&#xff1f;我想我不太清楚指向指针的指针。有人能帮我指出我的问题在哪里吗&#xff1f;谢谢。…

Kubernetes 在知名互联网公司的(dotnet)落地实践

容器化背景本来生活网&#xff08;benlai.com&#xff09;是一家生鲜电商平台&#xff0c;公司很早就停止了烧钱模式&#xff0c;开始追求盈利。既然要把利润最大化&#xff0c;那就要开源节流&#xff0c;作为技术可以在省钱的方面想想办法。我们的生产环境是由 IDC 机房的 10…

Java银行开户,取钱,存钱,查询余额,退出。。。。。

一&#xff1a;上码 package com.wyj.two;import java.util.Scanner;/*** 封装的练习*/ public class Demo8 {public static void main(String[] args) {Scanner in new Scanner(System.in);Account account new Account();System.out.println("欢迎来到杰哥银行"…

linux开发亿连手机互联,亿连手机互联车载版下载-亿连手机互联车机版v6.6.1 安卓版-腾牛安卓网...

亿连手机互联车机版&#xff0c;交互一体&#xff0c;手机-导航仪应用深度融合&#xff1b;升级服务&#xff0c;依托手机OTA升级导航仪应用&#xff1b;流畅连接&#xff0c;双通道互联技术连接更流畅&#xff1b;全新界面&#xff0c;配合前装和后装专业市场&#xff1b;为您…

7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!

一&#xff1a;题目 7-3 树的同构 (25 分) 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树…

Dapr微服务应用开发系列0:概述

题记&#xff1a;Dapr是什么&#xff0c;Dapr包含什么&#xff0c;为什么要用Dapr。Dapr是什么Dapr&#xff08;Distributed Application Runtime&#xff09;&#xff0c;是微软Azure内部创新孵化团队的一个开源项目&#xff0c;皆在解决微服务应用开发过程的一些共性问题。以…

c语言 大数相加,c/c++开发分享C语言计算大数相加的方法

c/c开发分享问题描述输入两个整数a和b&#xff0c;输出这两个整数的和。a和b都不超过100位。算法描述由于a和b都比较大&#xff0c;所以不能直接使用语言中的标准输入格式输入包括两行&#xff0c;第一行为一个非负整数a&#xff0c;第二行为一个非负整数b。两个整数都不超过10…

你以为.NET Core仅仅是开源跨平台?试试Docker,刷新你的认知!

2016 年微软发布了 .NET Core 1.0&#xff0c;可谓是平地起惊雷&#xff0c;因为微软终于开源和跨平台了。但是一直到19年12月份发布了.NET Core3.1&#xff0c;开源社区的威力才展现出来&#xff0c;3个月增加了100w开发者&#xff0c;才真正吸引大厂的关注。但你以为仅仅是因…

7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!

一&#xff1a;题目 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行&#xff0c;每行分别先给出多项式非零项的个数&#xff0c;再以指数递降方式输入一个多项式非零项系数和指数&#xff08;绝对值均为不超过1000的整数&#xff09;。数字间以空格分隔。 输…

c语言中注释部分二侧分界符为,C语言常见复习题(选择填空)及参考答案

C语言常见复习题及参考答案一、选择题1.下述标识符中&#xff0c;()是合法的用户标识符。A.A#CB.getchC.voidD.ab*2.在C语言中&#xff0c;字符型数据在内存中是以()形式存放的。A.原码B.BCD码C.反码D.ASCII码3.以下选项中不合法的用户标识符是()。A.abc.cB.fileC.MainD.PRONTF…

c语言的程序灵魂是什么,C语言 第二章 程序的灵魂--算法

《C语言 第二章 程序的灵魂--算法》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言 第二章 程序的灵魂--算法(39页珍藏版)》请在人人文库网上搜索。1、第二章 程序的灵魂-算法,什么是程序? 计算机是机器-在求解某一问题时-需要有相应程序-程序是用计算机能够识…