/*
A、B为两个递增的单链表,设计一个算法,去除A中与B重复的元素
*/
#include<stdio.h>
#include<stdlib.h>
#define maxSize 100
typedef struct LNode
{
int data;
LNode *next;
}LNode;
//创建链表结点
void creatLNode(LNode *&L)
{
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
}
//尾插法创建单链表
void creatListR(LNode *L,int a[],int n)
{
LNode *s,*r;
r=L;
for(int i=0;i<n;i++)
{
//s=(LNode*)malloc(sizeof(LNode));
creatLNode(s);
s->data=a[i];
//s->next=NULL;
r->next=s;
r=s;
}
r->next=NULL;
}
//打印链表的值
void outList(LNode *L){
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
//清除掉A中与B中重合的元素,并保持A递增
void clearDefference(LNode *&A,LNode *B)
{
LNode *p,*q,*pre,*r;
p=A->next;
q=B->next;
pre=A;
while(q!=NULL && p!=NULL)
{
if(p->data<q->data)
{
pre=p;
p=p->next;
}else if(p->data>q->data)
{
q=q->next;
}else{
pre->next=p->next;
r=p;
p=p->next;
free(r);
}
}
}
int main(){
//创建两个增序单链表
LNode *A,*B;
creatLNode(A);
creatLNode(B);
//为单链表A、B赋值
int a[]={12,34,45,56,69,70,89,90};
int b[]={11,23,34,34,46,69,70};
//创建单链表A,B
creatListR(A,a,8);
creatListR(B,b,7);
//打印出A、B链表的值
printf("A链表:\t");
outList(A);
printf("B链表:\t");
outList(B);
//清除A中与B重复的元素,并保持A递增
clearDefference(A,B);
//打印出清除后A链表的值
printf("清除与B链表重复元素后的A链表:\t");
outList(A);
return 0;
}
09-20
5827
10-29
8039