PTA-两个有序链表序列的交集
2018-03-20 18:50
337 查看
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
代码:/*
@两个有序链表序列的交集
*/
#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;
}
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−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;
}
相关文章推荐
- PTA习题 两个有序链表序列的交集
- PTA数据结构之两个有序链表序列的交集
- pta 两个有序链表序列的交集
- PTA 5-52 两个有序链表序列的交集 (20分) (单链表)
- 两个有序链表序列的交集
- <数据结构学习与实验指导>2-12两个有序链表序列的交集/2-13两个有序序列的中位数
- 2-12. 两个有序链表序列的交集(20)
- PAT DS 2-11 两个有序链表序列的交集
- 7-2 两个有序链表序列的交集
- 【C】两个有序链表序列的交集
- 链表——两个有序链表序列的交集
- 7-2 两个有序链表序列的交集(20 分)
- 每天作死一道题——两个有序链表序列的交集
- 2-12. 两个有序链表序列的交集(20)
- PTA 两个有序链表序列的合并
- pta5-51 两个有序链表序列的合并(20分)
- Programming Ability Test学习 2-12. 两个有序链表序列的交集(20)
- PTA-线性结构1 两个有序链表序列的合并
- 5-16 两个有序链表序列的交集 (20分)
- [PTA] 线性结构1 两个有序链表序列的合并(15 分)