链表
1、常见的缓存淘汰策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)。
2、不管是「指针」还是「引用」,实际上,它们的意思都是一样的,都是存储所指对象的
内存地址。
3、指针:将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。
在编写链表代码的时候,我们经常会有这样的代码:p->next=q。这行代码是说,p 结点中的 next 指针存储了 q 结点的内存地址。
4、哨兵:解决「边界问题」的,不直接参与业务逻辑。如果引入哨兵结点,在任何时候,不管链表是不是空,head 指针都会一直指向这个哨兵结点。也把这种有哨兵结点的链表叫带头链表。哨兵结点是不存储数据的。
如何表示一个空链表?head=null 表示链表中没有结点了。其中 head 表示头结点指针,指向链表中的第一个结点。
5、1
2
3
4
5
6char* 是声明一个字符类型的指针
# 声明一个指针 c,这个指针指向的内存地址上只能存放字符类型的值
# 在 char* c = "Hello World"; 中,"Hello World" 是长度为 12 的字符『数组』常量,其最后一个元素是'\0',而这句代码执行的结果是将 c 指向了 "Hello World" 的第一个字符 'H',c 后面的连续内存依次存放 'e','l','l','o',' ','W','o','r','l','d','\0'
char* c = "Hello World";
6、重点留意边界条件处理1
2
3
4
5
6
7如果链表为空时,代码是否能正常工作?
如果链表只包含一个结点时,代码是否能正常工作?
如果链表只包含两个结点时,代码是否能正常工作?
代码逻辑在处理头结点和尾结点的时候,是否能正常工作?
7、常见链表操作1
2
3
4
5
6
7
8
9单链表反转
链表中环的检测
两个有序的链表合并
删除链表倒数第 n 个结点
求链表的中间结点