希望学长的代码能给大二西电er们带来帮助(大家一定要好好学习数据结构,合理利用资源)
大家找到了什么bug或有什么改进意见可以私信我或在下方留言,我都会看的
不多说废话直接上代码
#include <stdio.h>
#include<malloc.h>
typedef struct node {
int data;
struct node* next;
} LinkList; /*定义链表节点的结构*/
LinkList* create();/*函数声明*/
void ListDelete(LinkList* La, LinkList* Lb, LinkList* Lc);
void Print(LinkList*);
int main(void) {
/*功能:建立单链表 A,B,C,并且删除 A 中均在 B 和 C 中出现的数据。*/
LinkList* headA, * headB, * headC;
printf("*************please input 1LA numbers : ***********************\n");
headA = create();/*建立链表*/
printf("*************please input LB numbers : ***********************\n");
headB = create();
printf("*************please input LC numbers : ***********************\n");
headC = create();
printf("*****************删除之前的 3 个表分别为: *********************\n");
printf("\n");
printf("*****************LA表为******************\n");
Print(headA);/*输出显示链表数据*/
printf("\n");
printf("*****************LB表为******************\n");
Print(headB);
printf("\n");
printf("*****************LC表为******************\n");
Print(headC);
printf("\n");
ListDelete(headA, headB, headC);/*删除 A 中满足条件的节点*/
printf("********************删除之后的 LA 表为: ***********************\n");
Print(headA);
return 0;
}
int times[100010];
void ListDelete(LinkList* La, LinkList* Lb, LinkList* Lc) {
LinkList* p = La->next,*q;
while (p) {
times[p->data]++;
p = p->next;
}
p = Lb->next;
while (p) {
times[p->data]++;
p = p->next;
}
p = Lc->next;
while (p) {
times[p->data]++;
p = p->next;
}
p = La,q=La->next;
while (q) {
if (times[q->data] == 1) {
p->next = q;
p = q;
}
q = q->next;
}
p->next = NULL;
}
//建立顺序表
LinkList* create() {
LinkList* L, * p, * q;
L = (LinkList*)malloc(sizeof(LinkList));
p = L;
int ch;
scanf("%d", &ch);
while (ch != -1) {
q = (LinkList*)malloc(sizeof(LinkList));
q->data = ch;
q->next = NULL;
p->next = q;
p = q;
scanf("%d", &ch);
}
return L;
}
//输出顺序表
void Print(LinkList* L) {
if (L->next == NULL) {
printf("null");
return;
}
LinkList* p = L->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
}