如何写好链表代码?

前述

链表代码不好写,初学者经常容易出错。掌握以下几个规则,可能可以提高编写链表的技术。
一共 6 个技巧:

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

对一个引用进行赋值,其实就是将这个变量的地址保存到这个引用中。

例如 int a = "100",就是将 “100” 的实际地址,保存到了 a 的引用中。

2 警惕指针丢失

下面有一段链表插入的代码

a.next = x; // 将 a 的 next 指向 x。
x.next = a.next;  // 将 x  的 next 指向 b。

这段代码实际上发生了错误。即所谓的指针丢失,如果这么写,那么 b 节点就会丢失。
而要修复这个 bug,只需将上下代码调换顺序即可。

3 利用哨兵简化实现难度

传统链表,当新增数据时,需要做以下判断:


if(head == null){
   head = new LinkedNode(x);
}

当删除数据时,也需要做判断:


if(head.next == null){
    head = null;
}

如果将 head 做为虚拟节点,那么就不用做这些判断,就可以提高代码的美感。

如下图:

4 重点留意边界处理

写完链表代码时,可以思考以下几个问题,来验证代码是否正确。

  1. 如果链表是空,代码有无 bug?
  2. 如果链表只有一个节点,代码有无 bug?
  3. 如果链表只有 2 个节点,代码有无 bug?
  4. 代码处理 head 和 tail 时,有无 bug?

5 举例画图,辅助思考

简单说,就是多画图。减轻大脑压力。

6. 最后,多写多练 ,没有捷径

leetcode 刷起来!!!!

下面是 5 个常见题目,熟练这 5 个题目,链表也就熟练了:

  1. 单链表反转
  2. 链表中环的检测
  3. 两个有序的链表合并
  4. 删除链表中倒数第 n 个节点
  5. 求链表的中间节点

小结

写链表是最考验逻辑思维能力的。链表代码到处都是指针操作,边界处理。一不小心就会采坑。这需要很多的练习和缜密的思考才能写出 bug free 的代码。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容