题目内容:
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
//定义链表节点
typedef struct node{
int data;
struct node *next;
}Node,*link;
//创建链表 (连着输入数据一并完成)
link Create(){
link L=new Node;
link r=L;//表示链表当前节点
int temp=0;
while(1){
cin>>temp;
if(temp!=-1){
link p=new Node;
p->data=temp;
p->next=NULL;
r->next=p;
r=p;
}
else{
break;
}
}
return L;
}
//两个链表求交集,返回新的链表
link Intersection(link La,link Lb){
link Lc=new Node;
link r=Lc;
link p=La->next;//因为是有头结点,所以要加上next
link q=Lb->next;
while(p&&q){
link s=new Node;
s->next=NULL;
if(p->data<q->data){
p=p->next;
}
else if(p->data>q->data){
q=q->next;
}
else{
s->data=p->data;
p=p->next;
q=q->next;
r->next=s;
r=s;
}
}
return Lc;
}
int main(){
link La=Create();
link Lb=Create();
link Lc=Intersection(La,Lb);
link q=Lc->next;
link p=Lb->next;
if(q==NULL){
cout<<"NULL"<<endl;
return 0;
}
int flag=0;
while(q){
if(flag==0){
flag=1;
cout<<q->data;
}
else{
cout<<" "<<q->data;
}
q=q->next;
}
}
需要考虑的情况:
1 两个链表均为-1(空)
2 第二个链表为空
3 没有交集
4 全部都是交集
5 含有重复的数字
该代码实现了一个C++程序,用于从两个非降序链表S1和S2中找出它们的交集并创建新链表S3。输入包含两个非降序链表的元素,以-1结束。程序首先创建链表,然后通过比较每个节点的数据找到交集。输出为交集序列,如果为空则输出'NULL'。程序需要考虑多种情况,包括空链表、无交集等。

被折叠的 条评论
为什么被折叠?



