数据结构(四)——链表

极客时间《数据结构与算法之美》学习笔记
常见的缓存淘汰策略:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)
数组和链表的区别:数组需要一块连续的内存空间来存储,对内存的要求比较高。链表不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。
链表擅长插入、删除操作,时间复杂度为O(1);查询的效率不高,时间复杂度为O(n)。
数组擅长通过下标随机访问元素,时间复杂度为O(1);插入、删除的效率不高,时间复杂度为O(n)。

在这里插入图片描述
几种最常见的链表结构:单链表、双向链表、循环链表和双向循环链表
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
几个链表代码技巧:
技巧一:理解指针或引用的含义
将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。

技巧二:警惕指针丢失和内存泄漏

技巧三:利用哨兵简化实现难度

技巧四:重点留意边界条件处理
用来检查链表代码是否正确的边界条件有这样几个:
如果链表为空时,代码是否能正常工作?
如果链表只包含一个结点时,代码是否能正常工作?
如果链表只包含两个结点时,代码是否能正常工作?
代码逻辑在处理头结点和尾结点的时候,是否能正常工作?
技巧五:举例画图,辅助思考
技巧六:多写多练,没有捷径