题目描述
(线性表)两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列,是则输出1,否则输出0。
样例输入
5
7 8 9 12 10
4
7 9 56 10
样例输出
0
提交采用C++方式提交
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
int score;
struct Lnode *next;
}LinkNode;
void InitList(LinkNode *&L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
}
void CreatList(LinkNode *&L,int n)
{
LinkNode *p,*r;
r=L;
int i;
for(i=0;i<n;i++)
{
p=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%d",&p->data);
r->next=p;
r=p;
}
r->next=NULL;
}
void Print(LinkNode *L)
{
LinkNode *p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Judge(LinkNode *head1,LinkNode *head2,int n)
{
LinkNode *p=head1->next,*q=head2->next;
int i=0;
while(p!=NULL)
{
while(q!=NULL)
{
if(q->data == p->data)
{
i++;
}
q=q->next;
}
if(i==n)
{
printf("1\n");
break;
}
p=p->next;
}
if(p==NULL)
{
printf("0\n");
}
}
int main()
{
int n,m;
LinkNode *head1,*head2;
scanf("%d",&n);
InitList(head1);
CreatList(head1,n);
scanf("%d",&m);
InitList(head2);
CreatList(head2,m);
Judge(head1,head2,m);
return 0;
}