1-7 两个有序链表序列的交集 (20 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;//假设线性表中的元素均为整型
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
void ListPrint(LinkList &L)
{
LNode *p=L->next; //p指向第一个元素结点
if(pNULL)
printf(“NULL”);
while(p!=NULL)
{
if(p->next!=NULL)
printf("%d “,p->data);
else
printf(”%d",p->data);
p=p->next;
}
}
Status CreateList(LinkList &L)
{
LNode *p=L;
int d;
while((p->next)!=NULL)
{
p=p->next;
}
scanf("%d",&d);
while(d!= -1)
{
LNode tp=(LNode)malloc(sizeof(LNode));
if(tpNULL)
return OVERFLOW;
tp->data=d;
p->next=tp;
tp->next=NULL;
scanf("%d",&d);
p=p->next;
}
return OK;
}
void AddList(LinkList &A,LinkList &B,LinkList &C)
{
LNode *pa,*pb,*pc;
pa=A->next;
pb=B->next;
pc=C;
while(pa&&pb)
{
if((pa->data)(pb->data))
{
pc->next=pa;
pa=pa->next;
pb=pb->next;
pc=pc->next;
}
else if((pa->data)<(pb->data))
{
pa=pa->next;
}
else
pb=pb->next;
}
}
int main()
{
LinkList A,B,C;
A=(LinkList)malloc(sizeof(LNode));//注意LinkList的数据类型
if(ANULL)
return OVERFLOW;
A->next=NULL;
B=(LinkList)malloc(sizeof(LNode));//注意LinkList的数据类型
if(BNULL)
return OVERFLOW;
B->next=NULL;
C=(LinkList)malloc(sizeof(LNode));//注意LinkList的数据类型
if(CNULL)
return OVERFLOW;
C->next=NULL;
CreateList(A);
CreateList(B);
AddList(A,B,C);
ListPrint©;
return 0;
}