作者 DS课程组
单位 浙江大学
已知两个非降序链表序列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
答案
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
struct array
{
int list[100000];
int lenth;
};
typedef struct array arr;
arr* Read();
void Mix(arr* arr1, arr* arr2);
int main()
{
arr* a;
a = Read();
arr* b;
b = Read();
Mix(a, b);
return 0;
}
arr* Read()
{
arr* arry = (arr*)malloc(sizeof(arr));
scanf("%d", &arry->lenth);
for (int i = 0;i < arry->lenth;i++)
{
scanf("%d", &arry->list[i]);
}
return arry;
}
void Mix(arr* arr1, arr* arr2)
{
int sub1 = 0, sub2 = 0;
while (1)
{
if (arr2->lenth == sub2)
{
printf("%d ", arr1->list[sub1]);
sub1++;
}
else if (arr1->lenth == sub1)
{
printf("%d ", arr2->list[sub2]);
sub2++;
}
else if (arr1->list[sub1] <= arr2->list[sub2])
{
printf("%d ", arr1->list[sub1]);
sub1++;
}
else if(arr2->list[sub2] < arr1->list[sub1])
{
printf("%d ", arr2->list[sub2]);
sub2++;
}
if (sub1 == arr1->lenth && sub2 == arr2->lenth)
{
break;
}
}
}