博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双向链表中删除所有匹配元素
阅读量:5208 次
发布时间:2019-06-14

本文共 1117 字,大约阅读时间需要 3 分钟。

  今天又复习双向链表,其中比较有意思的一部分代码就是删除所有匹配元素。

  在复习的过程中,我看到一处代码,有些疑惑,后来细看才发现奥秘。如果元素是头节点,在删除头节点之后,为什么不将新的头节点的前指针置为空,如果元素是尾节点,在删除尾节点之后,为什么不将新的尾节点的后指针置为空?后来细看才发现,这样的工作是在另一个if分支(第7行、第13行)中处理的。

 

1 // 删除所有匹配元素 2     void remove (const T& data) { 3         for (node* p = m_head, *next; p; p = next) {          //遍历 4             next = p->m_next;            5             if (equal (p->m_data, data)) {     //如果相等 6                 if (p->m_prev)                //如果不是头节点 7                     p->m_prev->m_next = p->m_next;//将p的后节点挂到前节点。并且这一将将新的尾节点的后节点置为空 8                 else                          //如果是头节点 9                     m_head = p->m_next;       //头节点后移(此处不用处理前指针么?)10                     //m_head->prev = NULL;11     12                 if (p->m_next)                 //如果不是尾节点13                     p->m_next->m_prev = p->m_prev;//将p的前后节点挂钩。在这一步将新的头节点的前节点置空14                 else                          //如果是尾节点15                     m_tail = p->m_prev;       //尾节点前移16 17                 delete p;                //处理好节点的指针,删除p指针18             }   19     } 20   } 

 

转载于:https://www.cnblogs.com/itit/p/3391448.html

你可能感兴趣的文章
Python time & datetime & string 相互转换
查看>>
细说WebSocket - Node篇
查看>>
【pwnable.kr】 flag
查看>>
1014 装箱问题——http://codevs.cn/problem/1014/
查看>>
poj 3177 边双联通 **
查看>>
java.lang.UnsupportedOperationException
查看>>
java-斐波那契数列的解法
查看>>
rackup工具
查看>>
Linux operating system (Ubuntu) 学习-1
查看>>
ajax-原生写法步骤
查看>>
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
查看>>
svn完整备份迁移
查看>>
Python字典实现分析
查看>>
jenkins+testNG
查看>>
Java自定义范型的应用技巧
查看>>
[洛谷1485] 火枪打怪
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
错了:用流量能够放肆,有wifi则要节制
查看>>
CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
查看>>
https://zhidao.baidu.com/question/362784520674844572.html
查看>>