茶艺师学算法打卡3:链表
写在前面的话
“写链表代码是最考验逻辑思维能力的。”
学习笔记
- 链表也是另一种线性数据结构,与数组不同的是,链表不用“连续”。
- 因为不用“连续”,因此链表的插入与删除都是 。注意,是插入与删除这两个动作是 。
- 在链表上查找,至少需要 ,因为在单链表上,查找得像数组那样“一个个往下找”。
- 编程里有这么一句话,“用空间换时间,用时间换空间”。在链表上,如果单链表多加一个记录“往前”的指针,那么这链表就拥有了能 返回上一个节点的能力,这时该链表就成为“双向链表”。基于这原理,链表加上各种“插件”就能实现更多的功能。
- “指针”是链表的重要的一环,这也是最让人难以理解的地方,做算法题时遇到调表都会发怵。到现在我自己的小小经验是:
- 搞不懂时,画画图
- 插入节点时,先把新的“连上”,再把旧的“拆掉”
- 删掉节点时,需要把对应的内存释放掉。如果使用的语言能自动管理内存的,可以不用考虑这问题
- 哨兵节点用好了是会很顺手,值得花时间再研究研究
- 要认真考虑,在边界时,会不会有 bug
- 多写多练多总结
结语
到目前而言,我还是有点怕“链表”的,但有啥办法,“菜就多练”啊。