早教吧 育儿知识 作业答案 考试题库 百科 知识分享

以带头结点的单链表表示有序表,编写算法,从有序表A中删除所有和有序表B中元素相同的结点

题目详情
以带头结点的单链表表示有序表, 编写算法,从有序表A中删除所有和有序表B中元素相同的结点
▼优质解答
答案和解析
#include
#include
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE * creat(int n)
{
int i,d;
NODE *head,*p,*q;
head = NULL;
if(head == NULL)
{
printf("输入第1个结点:");
scanf("%d", &d);
head = (NODE*)malloc(sizeof(NODE));
head->data = d;
head->next = NULL;
}
p = head;
for(i=1; i {
printf("输入第%d个结点:",i+1);
scanf("%d",&d);
q = (NODE*)malloc(sizeof(NODE));
q->data = d;
q->next = NULL;
p->next = q;
p = q;
}
return head;
}
void output(NODE *head)
{
NODE *p;
p = head;
while(p!=NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
NODE *del(NODE *heada, NODE*headb)
{
NODE *pa,*pb,*temp,*qa;
pa = heada;
qa = heada;
pb = headb;
while(pa!=NULL)
{
while(pb!=NULL)
{
if(pa->data == pb->data)
{
if(pa == heada)
{
temp = pa;
heada = heada->next;
pa = heada;
qa = pa;
free(temp);
}
else
{
temp = pa;
qa->next = pa->next;
pa = pa->next;
free(temp);
}
}
if(pa!=NULL&&(pa->data < pb->data))
{
qa = pa;
pa = pa->next;
break;
}
pb = pb->next;
}
}
return heada;
}
void main()
{
int n;
NODE *heada,*headb;
printf("输入链表a结点个数:");
scanf("%d",&n);
heada = creat(n);
printf("链表a:");
output(heada);
printf("输入链表b结点个数:");
scanf("%d",&n);
headb = creat(n);
printf("链表b:");
output(headb);
heada = del(heada,headb);
output(heada);

}