classNode(object):def__init__(self, results):self.results = resultsself.prev =Noneself.next=NoneclassLinkedList(object):del __init__(self):self.head =Noneself.tail =Nonedefmove_to_front(self, node):# ...defappend_to_front(self, node):# ...defremove_from_tail(self):# ...classCache(obejct):def__init__(self, MAX_SIZE):self.MAX_SIZE = MAX_SIZEself.size =0self.lookup ={}self.linked_list = LinkedList()defget(self, query)'''Get the stored query result from the cacheAccsssing a node updates its position to the front of the LRU list'''node = self.lookup.get(query)if node isNone:returnNoneself.linked_list.move_to_front(node)return node.resultsdefset(self, resuts, query):'''Set the results for the given query key in the cache.When updating an entry, updates its position to the front of the LRU listIf the entry is new and the cache is at capacity, remove the oldest entry before the new entry is added '''node = self.lookup.get(query)if node isnotNone: node.results = resultsself.linked_list.move_to_front(node)else:if self.size == self.MAX_SIZEself.lookup.pop(self.linked_list.tail.query,None)self.linked_list.remove_from_tail()else:self.size +=1new_node = Node(results)self.linked_list.append_to_front(new_node)self.lookup[query]= new_node