茶艺师学算法打卡3:链表

92 阅读1分钟

茶艺师学算法打卡3:链表

写在前面的话

“写链表代码是最考验逻辑思维能力的。”

学习笔记

  1. 链表也是另一种线性数据结构,与数组不同的是,链表不用“连续”。
  2. 因为不用“连续”,因此链表的插入与删除都是 O(1)O(1) 。注意,是插入删除这两个动作是 O(1)O(1)

  1. 在链表上查找,至少需要 O(n)O(n) ,因为在单链表上,查找得像数组那样“一个个往下找”。
  2. 编程里有这么一句话,“用空间换时间,用时间换空间”。在链表上,如果单链表多加一个记录“往前”的指针,那么这链表就拥有了能 O(1)O(1) 返回上一个节点的能力,这时该链表就成为“双向链表”。基于这原理,链表加上各种“插件”就能实现更多的功能。
  3. “指针”是链表的重要的一环,这也是最让人难以理解的地方,做算法题时遇到调表都会发怵。到现在我自己的小小经验是:
    • 搞不懂时,画画图
    • 插入节点时,先把新的“连上”,再把旧的“拆掉”
    • 删掉节点时,需要把对应的内存释放掉。如果使用的语言能自动管理内存的,可以不用考虑这问题
    • 哨兵节点用好了是会很顺手,值得花时间再研究研究
    • 要认真考虑,在边界时,会不会有 bug
    • 多写多练多总结

结语

到目前而言,我还是有点怕“链表”的,但有啥办法,“菜就多练”啊。