#include#includetypedef struct Node{
    int id;
    int score;
    struct Node* next;
}Node;
void AddAtEnd(Node**head,int id, int score){
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->id = id;
    new_node->score = score;
    new_node->next = NULL;
    if(*head == NULL)
    {
        *head = new_node;
        return;
    }

    Node* cur = *head;
    while(cur->next!=NULL){
        cur = cur->next;
    }
    cur->next = new_node;
}

void deleteNode(Node** head, int pos){
    Node *cur = *head;
    Node *prev = NULL;
    if(pos == 0) //要删除头节点
    *head = (*head)->next;
    else 
    {
    while(pos--)
    {
       prev = cur;
       cur = cur->next; //这样只是为了找到要删的节点
    }
    prev->next = cur->next;
    }
}

void showNode(Node* head){
    if(head ==NULL)
    {
    printf("Link list is empty\n");
    return;
    }
    Node*cur = head;
    printf("%d %d\n",cur->id,cur->score);
    while(cur->next!=NULL)
    {
        cur = cur->next;
        printf("%d %d\n",cur->id,cur->score);
    }
}
int main(){
    int m,n,id,score;
    scanf("%d%d",&m,&n);
    Node*A = NULL;
    Node*B = NULL;
    int m1=m,n1=n;
    if(m==0) printf("没输入");

    while(m1--)
    {
        scanf("%d%d",&id,&score);
        AddAtEnd(&A,id,score);
    }
    while(n1--)
    {
        scanf("%d%d",&id,&score);
        AddAtEnd(&B,id,score);
    }
    Node* curA = A;
    Node* curB = B;
    Node*cur = NULL;
    int cnt = 0;//更新删除位置

    for (int i = 0; i < m; i++)
    {
       // printf("第%d趟开始时,curA的id是%d\n",i,curA->id);
        curB = B;
       
        for (int j = 0; j < n; j++)
        {
            //printf("这是第%d趟的第%d个\n",i,j);
            //printf("curA和curB的id分别为%d %d\n",curA->id,curB->id);
            cur = curA->next;
            if(curA->id == curB->id)
            {
                deleteNode(&A,i-cnt);
                cnt++;
                //printf("删除了%d之后的链表A\n",curA->id);
                //showNode(A);
                break;
            }
            curB = curB->next;
        }
        curA = cur;
    }
    printf("%d\n",m-cnt);
    showNode(A);
    return 0;
}

解题思路:

注意事项:

参考代码:

点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论