链表元素的比较和删除
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
已知a、b和c三个递增有序的链表,现在要求对a做如下操作:删除其中既即在b中出现又在c中出现的元素(注意同一表中的元素有可能重复)。
输入
先在第一行输入3个小于100的正整数m,n,l分别表示链表a,b,c的长度,然后在第二行输入m个递增的正整数,第三行输入n个递增的正整数,第四行输入l个递增的正整数,分别为这三个链表的元素,
输出
按顺序输出删除元素后的链表a的值,每个元素占一行。
输入样例
3 8 5
23 47 88
2 5 7 9 47 47 88 99
10 20 30 40 47
输出样例
23
88
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList CreateList(LinkList L,int n)
{
LinkList s,p;
p=L=(LinkList)malloc(sizeof(Lnode));
for(;n>0;n--)
{
s=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return L;
}
int GetList(LinkList L,int t)
{
LinkList p;
p=L->next;
while(p)
{
if(t==p->data)
return 1;
p=p->next;
}
return 0;
}
LinkList ListDelete(LinkList L)
{
LinkList p,La,Lb,Lc;
int n,m,l;
scanf("%d",&n);
scanf("%d",&m);
scanf("%d",&l);
La=CreateList(L,n);
Lb=CreateList(L,m);
Lc=CreateList(L,l);
p=La;
while(p->next)
{
if(GetList(Lb,p->next->data) && GetList(Lc,p->next->data))
p->next=p->next->next;
else p=p->next;
}
return La;
}
int main()
{
LinkList La,L=NULL,p;
La=ListDelete(L);
p=La->next;
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
return 0;
}