美文网首页
链表代码注意事项

链表代码注意事项

作者: _Rice_ | 来源:发表于2018-10-08 20:21 被阅读0次

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

比如C语言是指针,就是相当于JAVA的引用

2、警惕指针丢失和内存泄漏

C 语言,内存管理是由程序员负责的,如果没有手动释放结点对应的内存空间,就会产生内存泄露。

Java 这种虚拟机自动管理内存的编程语言来说,就不需要考虑。

3、哨兵简化实现难度

哨兵结点其实就是链表的头结点,不存在数据,有next变量。

哨兵结点在很多地方都会用到,比如插入排序、归并排序、动态规划等待

  • 有哨兵结点的链表叫带头链表,没有哨兵结点的链表叫不带头链表
image.png

重点留意边界问题处理

边界问题没有充分考虑好容易产生BUG。

在编写的时候一定要检查边界问题是否考虑全面、以及代码在边界条件下能否正常运行

例如,但不限于:

  • 链表为空时
  • 链表只包含一个结点
  • 链表只包含两个结点
  • 头结点和尾结点的处理

4、举例画图,辅助思考

5、多写多练,熟能生巧,没有捷径

应用

算法实现考虑递归和非递归实现
  • 单链表反转

思想:指针方向取反

  • 两个有序的链表合并

思想:分别处理两个链表都有结点、只有一个链表有结点的情况

推荐阅读:两个有序的链表合并

  • 删除链表倒数第n个结点

思想:找到第n-1个结点,期next指向第n+1个结点

  • 求链表的中间结点

思想:利用快慢指针法

设置两个指针slow和fast,两个指针同时向前走,fast指针每次走两步,slow指针每次走一步,注意区分长度是奇偶性。

推荐阅读:实现寻找链表的中间节点

相关文章

  • 数据结构基础--链表

    目录 基本性质 链表的分类按连接方向分类按照有无循环分类 链表问题代码实现的关键点 链表插入和删除的注意事项 链表...

  • LintCode 翻转链表 II

    题目 翻转链表中第m个节点到第n个节点的部分 注意事项m,n满足1 ≤ m ≤ n ≤ 链表长度 代码

  • 二叉树的其他问题

    问题1 把二叉搜索树转换为累加树 原理 代码 注意事项 问题2 二叉树展开为链表 原理 代码 注意事项 问题3 二...

  • 链表代码注意事项

    1、理解指针或引用的含义 比如C语言是指针,就是相当于JAVA的引用 2、警惕指针丢失和内存泄漏 C 语言,内存管...

  • JS与Leetcode - 链表删除类型

    一、 链表删除类型注意事项 首先判空, 若为空,则直接返回 区分删除头节点 还是 删除其余节点, 因为在代码中对于...

  • 单链表 & 双链表& 单向循环链表的实现

    单链表 具体实现: 双链表 代码实现: 单向循环链表的实现 代码实现:

  • 链表

    链表 链表vs数组 几个写链表代码的技巧

  • 链表相交问题

    问题1 求链表是否有环 原理 可以使用快慢指针,如果快指针可以追上慢指针就说明有环 代码 注意事项 暂无 问题2 ...

  • 单链表的实现--c结构体实现、Python类实现

    手写了一遍链表的代码,写完神清气爽再也不害怕写链表代码了hhhhh 链表的具体代码实现,链表的功能有创建、插入、删...

  • 链表简介

    链表简介 链表是一种线性数据结构 链表有两种分别为 单链表 伪代码如下: 双链表 伪代码如下: 链表添加操作 单链...

网友评论

      本文标题:链表代码注意事项

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