A,B,C为递增有序链表,删去A中即在B出现也在C出现的元素
代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *List;
void listTailInsert(List &L){
List r, s;
char c;
ElemType e;
L = (List)malloc(sizeof(LNode));
r = L;
while(cin>>e){
s = (List)malloc(sizeof(LNode));
s->data = e;
r->next = s;
r = s;
c = getchar();
if(c=='\n')
break;
}
r->next = NULL;
}
//删除交集元素
void deleteIntersection(List &A, List B, List C){
List pa, pb, pc;
pa = A;
pb = B->next;
pc = C->next;
while(pb && pc){
if(pb->data == pc->data){
while(pa && pa->next && pa->next->data<=pc->data){
if(pa->next->data==pc->data){
List t = pa->next;
pa->next = t->next;
free(t);
}else
pa = pa->next;
}
pb = pb->next;
pc = pc->next;
}else if(pb->data > pc->data){
pc = pc->next;
}else if(pb->data < pc->data){
pb = pb->next;
}
}
}
void Output(List L){
List p = L->next;
while(p){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main(){
cout<<"输入元素单个空格分隔,回车结束输入 \n";
List A, B, C;
cout << "输入A表元素:";
listTailInsert(A);
cout << "输入B表元素:";
listTailInsert(B);
cout << "输入C表元素:";
listTailInsert(C);
cout << "删除前的表A:";
Output(A);
deleteIntersection(A, B, C);
cout << "删除后的表A:";
Output(A);
return 0;
}