链表元素的比较和删除
时限: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; }
