西电数据结构上机题目-删除三张单链表中重复的结点

希望学长的代码能给大二西电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;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值