Problem C: 两个有序链表序列的交集
题目描述
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入描述
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出描述
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例
1 2 5 -1 2 4 5 8 10 -1
输出样例
2 5
提示
链表
Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int num;
struct LinkN *next;
}LinkN;//链表
void CreateLinkNode(LinkN *L);//创建链表
void IntersectionList(LinkN *La, LinkN *Lb);//求并输出两链表的交集
int main()
{
LinkN *L1;
LinkN *L2;
L1 = (LinkN*)malloc(sizeof(LinkN));//分配储存
L1->next = NULL;
L2 = (LinkN*)malloc(sizeof(LinkN));//分配储存
L2->next = NULL;
CreateLinkNode(L1);
CreateLinkNode(L2);
IntersectionList(L1, L2);
return 0;
}
void CreateLinkNode(LinkN *L)
{
int _num;
LinkN *q, *p;
q = NULL;
p = L;
while (1)
{
scanf("%d", &_num);//链表存入的数据
if (_num == -1)//输入-1时停止输入数据
{
return 0;
}
q = (LinkN*)malloc(sizeof(LinkN));
q->num = _num;
p->next = q;
q->next = NULL;
p = q;
}
return 1;
}
void IntersectionList(LinkN *La, LinkN *Lb)
{
int i;
LinkN *q, *p;
LinkN *bh;
q = La->next;
p = Lb->next;
bh = Lb;
i = 0;
while (q)
{
p = bh->next;
while (p)
{
if (q->num == p->num)//两者交集
{
if (i == 0)
{
printf("%d", q->num);
i++;
}
else
{
printf(" %d", q->num);
}
break;
}
p = p->next;
}
q = q->next;
}
if (i != 0)
{
printf("\n");
}
}