输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node{
ElementType data;
PtrToNode next;
};
typedef PtrToNode List;
List InitList(){ //初始化单链表
List L;
L=(List)malloc(sizeof(struct Node));
L->next=NULL;
return L;
};
void GreateFromTail(List L){ //尾插法输入链表
PtrToNode r,s;
int a;
int flag=1;
r=L;
while(flag){
scanf("%d",&a);
if(a!=-1){
s=(List)malloc(sizeof(struct Node));
s->data=a;
r->next=s;
r=s;
}
else{
flag=0;
r->next=NULL;
// printf("\n");
}
}
};
int main(){
List S1=InitList();
List S2=InitList();
List S3=InitList();
PtrToNode p,q,r,s;
GreateFromTail(S1);
GreateFromTail(S2);
if(S1->next==NULL||S2->next==NULL){printf("NULL");return 0;}
s=(List)malloc(sizeof(struct Node));
p=S1;
q=S2;
r=S3;
while(p->next!=NULL){
if(p->next->data>q->next->data){
q=q->next;
}
else if(p->next->data==q->next->data){
s=(List)malloc(sizeof(struct Node));
s->data=p->next->data;
r->next=s;
r=r->next;
q=q->next;
p=p->next;
}
else p=p->next;
}
if(S3->next==NULL)printf("NULL");
else {
for(p=S3;p->next!=NULL;p=p->next){
if(p->next->next!=NULL)printf("%d ",p->next->data);
else printf("%d",p->next->data);
}
}
return 0;
}