【算法专题 - 链表】

  1. 《链表系列之 无序单链表去重》
  2. 《链表系列之 滑动窗口问题 – 所有生成窗口的最大值的集合》

【问题】
  众所周知,链表结构相对于数组结构的一个优秀之处在于其删除元素操作仅靠更改指针指向即可完成,而数组则需要移动元素。但链表中被删除的元素所占用的资源是否需要被释放?
【分析】
  这个问题的关键在于组成链表的节点结构复杂程度。大致分为以下两类:

  1. 简单节点结构 – 节点中存储的数据未简单数据类型,不存在动态内存分配
      此种情况下我们无序对已经断链的节点进行内存释放操作。请参考本博客文章《链表系列之 无序单链表去重》。
/* Simple node struct */
public SimpleNode {public int data;public SimpleNode next;public SimpleNode(int data) {this.data  = data;}
}
  1. 复杂节点结构 – 节点中存储的是char *类型,在节点初始化的时候需要动态申请内存
      此时,因为组成链表的各个节点在初始化的时候都存在动态内存分配,故针对断链的节点我们一定要注意其内存释放,否则将出现内存泄漏。
/* Complicated node struct */
public ComplicatedNode {public int data;public char *pStr;public ComplicatedNode next;public ComplicatedNode(int data, char *str) {this.data  = data;if (NULL != str) {this.pStr = new char[len(str)+1];memset(this.pStr, 0, len(str)+1);strncpy(this.pStr, str, len(str)+1);} else {pStr = NULL;}}
}

需要注意一点:在释放断链节点的时候,节点内部动态申请的资源必须释放,但是节点自身可能无需被释放,详情参考本博客文章《链表系列之 无序单链表去重》中的解决方案一代码行20,此处我们依然需要使用next = next.next来保证程序正常运行!

链表节点被删除时的资源释放相关推荐

  1. rhcs做HA时的资源释放脚本实现

    场景: CentOS6.3的二次封装版本,安装hortonworks的hadoop发行版,并按照其官方文档实现高可用,但无fence设备支持,因此导致断网和断电测试时,备用HA节点无法得到资源释放的通 ...

  2. 教授先生带你学习链表:链表节点的删除与增添2

    本篇博客是在上一篇博客的基础上扩展的,希望读者在阅读完以下这个链接内容后再看这一篇 (9条消息) 教授先生带你学习链表:初识链表1_教授先生的博客-CSDN博客 描述: 给一串数字,用链表结构进行存储 ...

  3. c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)

    对单链表节点进行增删改查是最基本的操作,这篇博客将会来实现对节点的删除.其他的操作可参考<C语言实现链表的基本操作>这篇博客.删除某个节点有两个类型: (1)删除i某个位置的节点: (2) ...

  4. 面试题18: 删除链表节点:删除链表中重复的节点

    /******************************************************************* *<剑指Offer--名企面试官精讲典型编程题>C ...

  5. c语言求链表节点的删除,C语言实现链表节点的删除

    对链表节点进行增删改查是最基本的操作,这篇博客将会来实现对节点的删除.其他的操作可参考<c语言实现链表的基本操作>这篇博客.删除某个节点有两个类型: (1)删除i某个位置的节点: (2)判 ...

  6. 链表节点的删除(删除重复无序节点)

    #include<stdio.h> #include<stdlib.h> #define N 9 typedef struct node{ int  data; struct ...

  7. 关于递归删除链表节点为什么不会断链问题解释

    问题的由来:    当你第一次实现用递归实现链表删除功能的时候,是否有一丝丝的考虑过.这个问题呢?为什么对于非递归版本的删除必须要知道当前要删除节点的前驱,而需要对其前驱节点的next域指针进行修改. ...

  8. (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19760681 上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了.其实双向链表和单向链表也 ...

  9. free释放链表节点崩溃_【链表6】lt;最新gt;初识链表(link list)

    文/Edward 回顾之前讲述的链接两个结构体节点的内容,我们可以简单的将一些存储对象数据的结构体变量链接到一起,然后再去通过next指针遍历整个数据链,这就类似于将一些毫无关联的结构体变量链接成了一 ...

  10. 数据结构—链表节点的添加和删除(二)

    上个博客已经讲解了单链表的创建和节点的添加,那么今天我们就继续来学习链表的遍历输出和节点的删除. 目录 1. 链表的遍历输出 2. 节点的删除 3. 完整代码 4. 运行结果 1. 链表的遍历输出 v ...

最新文章

  1. BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)
  2. 014箱子开合并移动
  3. HDU Problem - 1455 Sticks
  4. 3pc_three phase commit protocol协议理解
  5. SAP C4C计价(Pricing)中折扣(Discount)的使用
  6. 写一个算法统计在输入字符串中各个字符出现的频度
  7. 1206封装电容在物料可靠性设计比较低
  8. TUN/TAP设备浅析(三) -- TUN/TAP设备的应用
  9. 利用java.io.File类实现遍历本地磁盘上指定盘符或文件夹的所有的文件
  10. Effective C++:条款37:绝不又一次定义继承而来的缺省參数值
  11. 如果你现在很穷,很苦,不要苦恼
  12. C#程序员开发WinForm必须知道的 Window 消息大全(转)
  13. 在线计算机免费课程表,Simple课程表
  14. [地图]通用网格地图库:粗糙地形导航的实现和用例
  15. mysql导数据出现Incorrect string value: '\xF0\x9F\x90\x82'报错
  16. LeetCode刷题记 --- pta 7- 4
  17. D. 1.绿纹龙的森林游记
  18. 2021年NCIS医疗质量管理控制情况调查表病案首页上传
  19. c语言双精度小数点后取几位_c语言float类型小数点后位数
  20. mysql workbench怎么_MySQL Workbench怎么用?MySQL Workbench详细使用教程

热门文章

  1. 读研,选择高校 or 研究所?
  2. java实现通讯录(手机版)
  3. Qt如何获取外网IP地址
  4. cad卸载_CAD一键卸载工具
  5. Android 7.0以上安装fiddler CA证书失败解决方法
  6. 简练软考知识点整理-激励理论之赫兹伯格双因素理论
  7. Diablo3英雄榜-使用Volley和Gson来处理暴雪API的Json数据
  8. Excel作图-子母饼图绘制
  9. 在东京大学感受_东京最好的街头小吃在哪里找到
  10. torch.cuda.is_available()返回false——解决办法