已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
LinkList CeratList(); //尾插法建立单链表
int main()
{
LinkList La = CeratList();
LinkList Lb = CeratList();
int flag = 0;
while (La && Lb)
{
if (La->data == Lb->data)
{
if (!flag)
{
printf("%d", La->data);
flag++;
}
else
printf(" %d", La->data);
La = La->next;
Lb = Lb->next;
}
else if (La->data < Lb->data)
La = La->next;
else
Lb = Lb->next;
}
if (!flag)
printf("NULL");
return 0;
}
LinkList CeratList()
{
LinkList head = (LinkList)malloc(sizeof(LNode));
LinkList node = NULL;
LinkList end = NULL;
head->next = NULL;
end = head;
int x;
scanf("%d", &x);
while (x != -1)
{
LinkList node = (LinkList)malloc(sizeof(LNode));
node->data = x;
end->next = node; end = node;
scanf("%d", &x);
}
end->next = NULL;
return head->next;
}