链表之节点删除(python)
题目描述
有两个链表a和b,设节点中包含学号、成绩。从a链表中删去b链表中有相同学号的那些节点。
输入格式
第一行有两个用空格隔开的整数n和m,分别表示a和b两个链表中的节点个数。保证n和m均不超过100。
之后的n行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
最后的m行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
a和b两个链表中的节点并不一定按照学号顺序排列。保证a链表中学号各不相同,b链表中学号各不相同。
输出格式
首先输出a链表最终剩下的节点个数k。
在接下来的k行,每行输出两个用空格隔开的整数,分别表示一个学生的学号和成绩。
请注意行尾输出换行。
样例输入
3 3
106 90
104 80
101 85
104 95
106 88
105 87
样例输出
1
101 85
代码实现:
n, m = map(int, input().split()) |
解题思路:
本题要求是剔除列表一中与列表二中元素中的第一个小元素相同的,最后计算输出列表一中剩余的个数和元素。
首先就是给列表一lis1和列表二lis2赋值;但由题意可知lis2中有用的就是学号,那么可以只将学号赋给lis2;
赋完值后,下来就是找符合条件的,这里可用双层for循环加if判断;
外层for循环控制的是lis1,内层for循环控制的是lis2,再嵌套一个if,让lis1的每个元素中的第一个小元素即lis1[n][0]与lis2比较,如果符合条件就将其赋予一个新列表
在这里用的if语句为if x not in m:即如果x不在m中就执行以下语句
本题还要求按顺序输出,就需要用到sort()函数
如果直接输出n_lis列表是不对的,它的格式与题目的要求是不符合的
我们需要先将元素从n_lis中取出,然后再从元素中取出学号和成绩,要注意空格和不换行
在这里我们用end=’ ‘语句,它代表的是不换行,’’引号中间的代表的是结尾输出的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大数据科技协会-zky!