美文网首页
第七节-链表下

第七节-链表下

作者: wean_a23e | 来源:发表于2018-10-05 21:34 被阅读27次

这节课主要讲了如何轻松正确地写出正确地链表代码

技巧一:理解指针或引用的含义

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

技巧二:警惕指针丢失和内存泄漏

写链表时,一定要注意指针指向哪了,对于脑子转不过来的情况,可以在纸上画图辅助思考。
对于自己管理内存的语言,如 C 语言,如果没有手动释放节点对应的内存空间,就会产生内存泄漏。不过,对于 Java 这种虚拟机自动管理内存的编程语言来说,就不需要考虑那么多了。

技巧三:利用哨兵简化实现难度

有时代码写不出来,也是因为代码的小逻辑多而乱,如果能够实现分析代码,简化逻辑,那么写起代码来就会更容易轻松了。
比如,当在单链表插入一个新节点时,需要两个小逻辑:1. 链表是空的的情况 2. 链表不是空的情况 写起来的代码就会像这样复杂
而如果我们有一个哨兵节点,那么就只需“无脑”往这个节点后面插入新节点而不用进行一次判空特殊处理了。

拓展:在很多算法中都有用到哨兵做简化,比如插入排序、归并排序、动态规划等。
下面这个例子就是用了哨兵提升性能:

inf find(char* a, int n, int key) {
  if (a[n-1] == key) {
    return n-1;
  }
  char tmp = a[n-1];
  a[n-1] = key;
  int i = 0;
  while (a[i] != key) {
    ++i;
  }
  a[n-1] = tmp;
  if (i == n-1) return -1;
  return i;
}

技巧四:重点留意边界条件处理

软件开发中,我们往往是从“通常情况入手,设计代码”,这种情况下,如果不注意特殊情况(边界情况)时,就容易产生 BUG。一定要在写完代码后,检查边界条件是否考虑齐全。
常用来检查链表代码是否正确的边界条件有这样几个:

  • 如果链表为空时,代码能否正常工作?
  • 如果链表只包含一个节点时,代码能否正常工作?
  • 如果链表只包含两个节点时,代码能否正常工作?
  • 代码逻辑在处理头节点和尾节点时,能否正常工作?

技巧五:画图举例,辅助思考

感觉这也是软件设计图的细节版。写出来,整理一下,就明白了。

技巧六:多写多练,没有捷径

水滴石穿,时刻铭记。

相关文章

  • 第七节-链表下

    这节课主要讲了如何轻松正确地写出正确地链表代码 技巧一:理解指针或引用的含义 将某个变量赋值给指针,实际上就是将这...

  • 链表(下)

    如何轻松写出正确的链表代码? 理解指针或引用的含义 1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是...

  • 链表(下)

    1.链表划分 思路一:可以把链表当作一副牌一样,用指针p遍历,不断地把比指定值x小的几点不断地插到前面比指定值小的...

  • 链表(下)

    2018年10月26日 本文主要做一些链表的常见题目,题目从LeetCode上摘取,通过练习加深对链表的掌握和理解...

  • 数据结构——链表

    本文所讲的链表是单链表,链表采用无头链表 科普下:一般链表可以分为有头节点的链表与无头节点的链表 有头节点的链表:...

  • 单链表

    链表链表链表~~就是用链子锁在一起的表。ps(以上为胡扯的话)...先来科普下什么叫单链表~单向链表(单链表)是一...

  • 链表

    链表是一类大的算法题。 一般分为一下几部分: 链表反转 链表合并 我们分别进行下讨论。 1. 链表反转比较典型的例...

  • 链表相关

    总结一下链表相关的操作 单链表节点的定义 实现单向链表的反向 删除单链表的所有节点

  • 反转链表

    讲反转链表之前,想讲一下怎么打印链表链表结构: 例子:打印链表: 反转链表的基础上,相当于要先遍历一边链表,上面的...

  • YYCache源码解析笔记(二)

    YYMemoryCache文件在分析代码之前,首先给大家介绍一下双向链表,如下图所示: 双向链表也叫双链表,是链表...

网友评论

      本文标题:第七节-链表下

      本文链接:https://www.haomeiwen.com/subject/cdtcaftx.html