原题链接:[编程入门]链表之节点删除
解题思路:
创建两个链表,首先是每个内部没有重复的值,但是在不同的链表之间有重复的值,因此只要判定有一个相同,就可以判断第一个链表的下一个节点 对应有n个节点的那个);在进行判断时要注意,使用while循环
注意事项:
1:如下的代码中 2:不要将m和n的位置弄乱了
参考代码:
/*为了方便头指针的使用,在下面的代码中先申请head的空间,然后就对head对应的值进行赋初值*/ #include <stdlib.h> #include <stdio.h> #include <malloc.h> typedef struct stu { int serial_number; int score; struct stu* next; }*stu0, stu1; int main() { int n, m, i = 0, j = 1; //j的作用:用来判断是否在一次外循环中找到了要删除的对象,在这里将j赋初值为1是 //因为在下面的代码中,当进行了删除后将会把p推进1(p和q均是结构体指针,在本题中我 //以p为先,q为后),因而就不执行下面的p=向前推进1了 //n表示的是第一个链表的节点个数,m表示的是第二个的 scanf("%d%d", &n, &m); stu0 head0 = (stu0)malloc(sizeof(stu1)), head1 = (stu0)malloc(sizeof(stu1)), p = NULL, q = NULL, pq = NULL; //习惯上以前为先即p if (head0 == NULL || head1 == NULL) //判断是否有足够的空间,没有则退出 { printf("There is not enough memery"); exit(-1); //位于标准库中 } scanf("%d%d", &head0->serial_number, &head0->score); //数据的读入 head0->next = head1->next = NULL; p = head0; while (i < n - 1) { q = (stu0)malloc(sizeof(stu1)); q->next = NULL; scanf("%d%d", &q->serial_number, &q->score); p->next = q; p = q; i++; } scanf("%d%d", &head1->serial_number, &head1->score); //在这里%d之间可以加空格 p = head1; i = 0; while (i < m - 1) { q = (stu0)malloc(sizeof(stu1)); q->next = NULL; scanf("%d%d", &q->serial_number, &q->score); p->next = q; p = q; i++; } p = head0; q = head1; while(p) //外层循环,对head0 进行遍历 { q = head1; j = 1; if (p == NULL) { break; } while(q) //内层循环,对q进行遍历 { if (p->serial_number == q->serial_number) { j = 0; if (p == head0) { head0 = p->next; free(p); p = head0; break; } else if (p->next == NULL) { free(p); pq->next = NULL; p = NULL; break; } else { pq->next = p->next; free(p); p = pq->next; break; } } else { q = q->next; } } if (j == 1) { pq = p; p = p->next; } } for (p = head0, i = 0; p; i++, p = p->next); //用i来计数看看留下了多少个节点 //也可以将i和j的使用合并,就可以少申请一个空间 printf("%d\n", i); for (p = head0; p; p = p->next) { printf("%d %d\n", p->serial_number, p->score); //在这里,用for循环语句就可以和方便地输出所有的节点 } }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复