三种常见的链表结构:
1.单链表
2.双链表
3.循环链表
从链表中删除数据的2种情况:
1.删除节点中‘值为某个值’的节点
2.删除给定指针指向的节点
第一种情况,单链表和双链表为了找到值的节点都必须从头遍历,尽管单纯的删除操作时间复杂度为O(1),但遍历所需时间复杂度为O(n)。故删除给定值节点的时间复杂度为O(n)
第二种情况,删除指定的节点需要找到其前一个节点。单链表为了找到前一个节点还需要从头遍历,故删除操作时间复杂度为O(n)。双链表这种情况只需要O(1)的时间复杂度。
同理,在指定节点前插入元素,双链表比单链表有优势。
链表实现LRU算法思路:
维护一个有序单链表,越靠近尾部的节点是越早之前访问的,当有新访问数据时,从头开始遍历链表
1.如果此数据之前已存在,则删除之前节点,然后再插入到链表头,时间复杂度O(n)
2.如果此数据没有:
.如果缓存未满则直接插入链表头部,时间复杂度O(1)
.如果缓存已满,则删除末尾节点,再将新数据节点插入到链表头,时间复杂度O(1)