#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct NODE {
int n;
struct NODE* next;
}NODE;
void Create(NODE* head, int n) {//尾插法创建单链表
NODE* q = head;
for (; n > 0; n--) {
NODE* p = (NODE*)malloc(sizeof(NODE));
if (p) {
int s;
scanf("%d",&s);
p->n = s;
q->next = p;
q = p;
}
}
q->next = NULL;
}
void Output(NODE* head) {//输出单链表中的数据
NODE* p = head->next;
while (p) {
printf("%d ", p->n);
p = p->next;
}
}
void Delete(NODE* head, NODE* copy) {//删除结点
NODE* p = head;
while ((p->next)!=copy) {
p = p->next;
}
NODE* rubbish = p->next;
p->next = rubbish->next;
free(rubbish);
}
void Function(NODE* head1,NODE* head2,NODE* head3){//完成题目要求的对A的操作
NODE* p1=head1->next;
NODE* p2=head2->next;
NODE* p3=head3->next;
while(p2&&p3){
if((p2->n)>(p3->n)) p3=p3->next;
else if((p2->n)<(p3->n)) p2=p2->next;
else{
while(p1){
if(p1->n==p2->n) break;
p1=p1->next;
}
if(p1){
Delete(head1,p1);
}
p1=head1->next;
p2=p2->next;
p3=p3->next;
}
}
}
int main()
{
int m,n,p;
scanf("%d%d%d",&m,&n,&p);//1.输入3个链表的长度,让它们分别为m,n,p
NODE* head1=(NODE*)malloc(sizeof(NODE));
NODE* head2=(NODE*)malloc(sizeof(NODE));
NODE* head3=(NODE*)malloc(sizeof(NODE));
head1->next=head2->next=head3->next=NULL;
if(head1&&head2&&head3){
Create(head1,m);
Create(head2,n);
Create(head3,p);//2.向3个链表中填充数据
}
Function(head1,head2,head3);//3.完成题目要求的对A的复杂操作
Output(head1);//4.完成题目要求的输出
return 0;
}
西工大NOJ数据结构理论——005.单链表的删除(严2.29)
最新推荐文章于 2022-06-17 15:19:08 发布