原文:https://juejin.im/post/5d843f145188254009776ea5
对于链表我的第一印象是熟悉,但不怎么用。如果遇到面试官问这个问题,怎么回答?
原文介绍了链表的定义,和数组的区别,等等。
我想如果遇到类似问题,即“为什么用A算法,而不用B算法?”的问题,如何回答:
1. 脑子里得回想2种算法的定义。
2. 然后就是比较,它们的结构,有什么异同。
3. 针对查找,插入,删除,读取等操作,谁的时间复杂度更低。原因是什么。
那么如果遇到原文“面试官: 既然已经有数组了,为什么还要链表”这个问题,就可以套路了。
答:
首先,定义上看:数组是连续的数据结构,通过0~n的整数索引来存取数据,它储存在连续的内存空间。链表则是每个元素通过指针来指向下一个元素,它使用指针把零散的内存块串联起来。
其次,它们都是都是线性数据结构。但不同之处是链表用指针代替了索引。根据指针的不同,链表有单向,双向,循环3种。
最后,比较不同的操作。
- 查询操作,都是从第一个元素开始,逐个比较,因此时间复杂度一样:n.
- 插入操作,数组如果要插入一个元素,那么它后面的元素的索引都需要改变;而链表,只需要增加和断开指针即可插入一个元素,无疑是更快。
- 删除操作,同理插入操作。
- 读取操作,比如读取数组A的第10个元素,直接使用索引即可,但是链表需要遍历操作,因此更慢。
如此就能从容面对面试官了。