数据结构-如何写好链表代码

如何写好链表代码?

  1. 理解指针或引用的含义

什么是指针?指针是一个变量

将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。

  1. 警惕指针丢失和内存泄漏

在插入和删除结点时,要注意先持有后面的结点再操作,否者一旦后面结点的前继指针被断开,就无法再访问,导致内存泄漏。

插入结点时,一定要注意操作的顺序

删除链表结点时,也一定要记得手动释放内存空间

  1. 利用哨兵简化难度

链表的插入、删除操作,需要对插入第一个结点和删除最后一个节点做特殊处理。利用哨兵对象可以不用边界判断,链表的哨兵对象是只存指针不存数据的头结点。

  1. 重点留意边界条件处理

操作链表时要考虑

  • 如果链表为空时,代码是否能正常工作?

  • 如果链表只包含一个结点时,代码是否能正常工作?

  • 如果链表只包含两个结点时,代码是否能正常工作?

  • 代码逻辑在处理头结点和尾结点的时候,是否能正常工作?

学习数据结构和算法主要是掌握一系列思想,能在其它的编码中也养成考虑边界的习惯。

  1. 举例画图,辅助思考

对于比较复杂的操作,可以用纸笔画一画,释放脑容量来做逻辑处理(时间换空间思想),也便于完成后的检查。

  1. 多写多练,没有捷径

孰能生巧,不管是什么算法,只有经过反复的练习,才能信手拈来。

哨兵对象思想,在 iOS AutoreleasePool 中有用到,在 AutoreleasePoolPush 时添加一个哨兵对象,Pop 时将到哨兵对象之间的所有 Autorelease 对象发送 release 消息。