Fork me on GitHub

算法入门04

链表

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
6
char* 是声明一个字符类型的指针

# 声明一个指针 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 个结点

求链表的中间结点

-------------本文结束感谢您的阅读-------------

本文标题:算法入门04

文章作者:Yan ChongSheng

发布时间:2018年11月20日

最后更新:2018年11月28日

原始链接:yanchongsheng.github.io/2018/11/20/Algorithm-2018-11-20-算法入门04/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

开启打赏模式