最近遇到两道题,
1.对元素是链表的list排序
2.根据元素的频率对list排序
都需要自定义【比较函数】,定义完比较函数后,选一种排序方法就可以了,但python的话,还可以直接用内置的functools,如果笔试的时候,可以直接调。
functools使用方法
import functools
def cmp(a,b):
#a<b return 复数
#a>b return 正数
#a=b return 0
nums.sort(key=functools.cmp_to_key(cmp))
eg1. 对元素是链表的list排序:
定义:
拥有相同前缀的,更长的链表更大
结点值更大时,链表更大
所以,cmp函数定义为
def lower(node1,node2):#<=
while node1 and node2:
if node1.val==node2.val:
node1=node1.next
node2=node2.next
elif node1.val<node2.val:
return True
elif node1.val>node2.val:
return False
if node1 and not node2:
return False
elif node2 and not node1:
return True
else:
return True