链表元素的比较和删除

链表元素的比较和删除

时限: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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值