已知两个非降序链表序列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,*List;
void create(List &l){
List p,q;
l=(node*)malloc(sizeof(node));
l->next=NULL;
q=l;
int d;
while(scanf("%d",&d)&&d!=-1){
p=(node*)malloc(sizeof(node));
p->data=d;
q->next=p;
q=q->next;
p->next=NULL;
}
}
void jiao(List &a,List &b,List &c){
List l1,l2;
l1=a->next;
l2=b->next;
List head=(List)malloc(sizeof(node));
List rear;
rear=head;
while(l1&&l2){
if(l1->data>l2->data){
l2=l2->next;
}else if(l1->data<l2->data){
l1=l1->next;
}else{
List p=(List)malloc(sizeof(node));
p->data=l1->data;
rear->next=p;
rear=p;
l1=l1->next;
l2=l2->next;
}
}
rear->next=NULL;
c=head;
}
void print(List C){
List l=C->next;
if(l==NULL){
printf("NULL");
}else{
List p=C->next;
while(p->next){
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
}
int main(){
List a,b,c;
create(a);
create(b);
jiao(a,b,c);
print(c);
return 0;
}
若代码有误还请指正!