#include
#include
typedef struct list{
int elem;//存数链表节点的元素值
struct list *next;//指向下一节点
}LIST;
LIST *createlist(int n)
{
LIST *head,*p,*p1;
int i;
head=(LIST *)malloc(sizeof(LIST));
p=head;
scanf("%d",&(p->elem));
p->next=NULL;
for(i=1;i
{
p1=(LIST *)malloc(sizeof(LIST));
scanf("%d",&(p1->elem));
p1->next=NULL;
p->next=p1;
p=p1;
}
return head;
}
LIST *A_B(LIST *A,LIST *B)//计算A-B,计算结果保存在A中
{
LIST *pa,*pa_prev,*pb;
int e,flag;
pa=A;
pa_prev=A;
while(pa!=NULL)//遍历链表A中的每一个元素
{
flag=0;
e=pa->elem;
pb=B;//对A中的每一个元素e,都从LB的表头开始查找
while(pb!=NULL)
{
if (pb->elem==e) //若A中的元素B也有,则在A中删除该元素
{
if (pa==A) //pa是表头
{
A=pa->next;
pa_prev=pa->next;
pa=pa->next;
flag=1;
}
else if(pa->next==NULL)//pa是表尾
{
pa=NULL;
pa_prev->next=pa;
flag=1;
}
else//非表头元素和表尾元素
{
pa_prev->next=pa->next;
pa=pa->next;
flag=1;
}
break;
}
else pb=pb->next;
}
if (flag==0) {pa_prev=pa;pa=pa->next;}
}
return A;
}
int main()
{
LIST *LA,*LB;
LIST *p;
int num;
printf("请输入链表A的长度:");
scanf("%d",&num);
printf("请输入链表A的元素,中间用空格隔开:");
LA=createlist(num);
printf("n请输入链表B的长度:");
scanf("%d",&num);
printf("请输入链表B的元素,中间用空格隔开:");
LB=createlist(num);
LA=A_B(LA,LB);//计算集合差
p=LA;//输出A-B的结果
printf("nLA-LB=");
while(p!=NULL)
{
printf("%4d",p->elem);
p=p->next;
}
return 0;
printf("n");
}程序的运行结果:
若满意,望采纳!