您的位置:首页 > 其它

PTA-两个有序链表序列的交集

2018-03-20 18:50 337 查看
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出
NULL

代码:/*
@两个有序链表序列的交集
*/
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define OK 1
#define OVERFLOW -2
using namespace std;
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(p==NULL)
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)
{
L = (LinkList)malloc(sizeof(LNode));
LNode *p=L;
p->next = NULL;
int d;
scanf("%d",&d);
while(d!= -1)
{
LNode *tp=(LNode*)malloc(sizeof(LNode));
if(tp==NULL)
return OVERFLOW;
tp->data=d;
p->next=tp;
tp->next=NULL;
scanf("%d",&d);
p = tp;
}
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;
C = (LinkList)malloc(sizeof(LNode));
if(C==NULL)
return OVERFLOW;
C->next = NULL;
CreateList(A);
CreateList(B);
AddList(A,B,C);
ListPrint(C);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: