题目描述:
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入描述:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出描述:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
样例输入1:
1 2 5 -1
2 4 5 8 10 -1
样例输出1:
2 5
样例输入2:
1 2 3 4 -1
1 2 3 4 -1
样例输出2:
1 2 3 4
样例输入3:
1 2 3 4 -1
5 6 7 8 -1
样例输出3:
NULL
样例输入4:
1 3 5 7 -1
3 5 7 9 -1
样例输出4:
3 5 7
代码实现:(编译环境:CLion 2022.2.4)
#include<stdio.h>
#include<stdlib.h>
int n;
struct Line
{
int data;
struct Line *next;
};
struct Line *creat1()
{
struct Line *head=NULL,*p1,*p2;
int i=0;
do
{
p1=(struct Line *)malloc(sizeof(struct Line));
scanf("%d",&p1->data);
if(i==0)
{
p2=head=p1;
}
else
{
p2->next=p1;
p1->next=NULL;
p2=p1;
}
i++;
}while(p1->data!=-1);
return(head);
}
int main() {
struct Line *head1, *head2,*head3, *p;
head1=creat1();
head2=creat1();
int same[100],a[100],b[100];
int i=0;
p=head1;
do
{
a[i]=p->data;
p=p->next;
i++;
}while(a[i-1]!=-1);
i=0;
int k=0;
p=head2;
do
{
b[i]=p->data;
p=p->next;
i++;
}while(b[i-1]!=-1);
int j;
for(i=0;a[i]!=-1;i++)
{
for(j=0;b[j]!=-1;j++)
{
if(a[i]==b[j])
{
same[k]=a[i];
k++;
}
}
}
n=k; //计算元素个数
if(k==0)
{
printf("NULL");
}
else {
for (i = 0; i < n; i++) {
printf("%d ", same[i]);
}
}
return 0;
}