//声明结构体链表
typedef struct student{
    int num;
    int score;
    struct student *next;
}STU,*LINK;//定义
//创建结构体链表函数
LINK createLink(int n){//n为传入的结点数
    int i;
    int num,score;
    LINK head,tail,p;//定义 头 尾 利用尾插法创建列表
    head=tail=(LINK)malloc(sizeof(STU));//为head分配空间
    tail->next=NULL;
    for(i=0;i<n;i++){
        p=(LINK)malloc(sizeof(STU));
        scanf("%d",&num);
        scanf("%d",&score);
        p->num=num;
        p->score=score;
        p->next=NULL;//创建新结点
        tail->next=p;
        tail=p;
    }
    return head;
}
//判断删除结点函数
void process(LINK head1,LINK head2,int n){
    LINK pr=head1;
    int count=0;//记录删除的结点数
    LINK p=head1->next;
    int flag;//定义标志变量
    while(p!=NULL){
        flag=0;//标志变量为0时 表示没有相同学号
        LINK q=head2->next;//每次q需从头开始遍历链表
        while(q!=NULL){
            if(p->num==q->num){
                pr->next=p->next;//相同时 将前指针pr->next指向p的
                free(p);//x消除后释放 不用再变pr即不需要pr=pr->next;
                p=pr->next;//向后移动p
                flag=1;
                count++;//计数
                break;
            }
            q=q->next;//移动q
        }
        if(flag==0){//当无元素相同时 pr p分别向下移动
            pr=pr->next;
            p=p->next;
        }
    }
    printf("%d\n",n-count);//计算出剩余的结点
    LINK head=head1->next;
    while(head!=NULL){//打印输出
        printf("%d %d\n",head->num,head->score);
        head=head->next;
    }
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    LINK head1,head2;
    head1=createLink(n);
    head2=createLink(m);
    process(head1,head2,n);
    return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论