【排序】functools

最近遇到两道题,

1.对元素是链表的list排序

2.根据元素的频率对list排序

都需要自定义【比较函数】,定义完比较函数后,选一种排序方法就可以了,但python的话,还可以直接用内置的functools,如果笔试的时候,可以直接调。

functools使用方法

import functools
def cmp(a,b):
    #ab  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.valnode2.val:
            return False
    if node1 and not node2:
        return False
    elif node2 and not node1:
        return True
    else:
        return True

你可能感兴趣的:(Leetcode,链表,数据结构)