链表元素的比较和删除

来源:互联网 发布:郑州办公软件培训 编辑:程序博客网 时间:2024/06/03 19:17

已知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 <cstdio>#include <cstdlib>#include <iostream>using namespace std;typedef struct node{    int data;    struct node *next;}LNode;LNode *Creat_LinkList(int n){    LNode *p,*q,*head;    int x;    head = (LNode*)malloc(sizeof(LNode));    head->next = NULL;    p=head;    q = p;    while(n--)    {        scanf("%d",&x);        p = (LNode*)malloc(sizeof(LNode));        p ->data = x;        p ->next = NULL;        q ->next = p;        q = p;    }    return head;}void print(LNode *h){    LNode *p;    p = h->next;    while(p!=NULL)    {        printf("%d\n",p->data);        p= p->next;    }}void Differ_LinkList(LNode *head){    LNode *p;    p=head;    while(p->next!=NULL)    {        if(p->data == (p->next)->data)        {            p->next = (p->next)->next;        }        else p=p->next;    }}void Del_LinkList(LNode *head,int x){    LNode *p;    p = head;    while(p->next!=NULL)    {        if((p->next)->data == x)        {            p->next = (p->next)->next;        }        p=p->next;    }}void Deal_LinkList(LNode *a,LNode *b,LNode *c){    LNode *p;    while(b->next!=NULL)    {        p = c;        while(p->next!=NULL)        {            if((b->next)->data == (p->next)->data)            {                Del_LinkList(a,(b->next)->data);            }            p = p->next;        }        b=b->next;    }}int main(){    LNode *a,*b,*c;    int x,y,z;    scanf("%d%d%d",&x,&y,&z);    a = Creat_LinkList(x);    b = Creat_LinkList(y);    c = Creat_LinkList(z);    Differ_LinkList(b);    Differ_LinkList(c);    Deal_LinkList(a,b,c);    print(a);    return 0;}
0 0
原创粉丝点击