单向链表删除节点

来源:互联网 发布:public cms官网 编辑:程序博客网 时间:2024/05/16 10:39

单向链表删除节点的一个技巧,这个是在《编程之美》上面看到的,可以用来对付一些算法题。

************************************************************************

有时候会遇到这种情况,单链表提供一个指针,要求要删除指针指向的节点。如下


考虑到释放内存,还再需要一个指针


************************************************************************

我们具体一下,有这么一个单向链表,这个链表的节点比较简单,【数据域只有一个整型】,并且当前的指针【iter不是头指针】,我们被要求删除这个指针指向的节点。


我们再标注一下


好了,因为指针指向的节点是需要删除的,所以其他节点都是‘好’的。

因为是单向链表,所以我们取不到iter指针的前一个节点的指针(非要取的话,效率可能堪忧)。所以只有这个iter指针,删除iter指针指向的节点是比较困难的,但是相对的,删除iter后面的节点是很简单的。

为了做好删除工作,我们只需要把【iter指针指向的节点的后续节点的数据域】复制到【iter指针指向的节点中】


这时候,链表变成这样子。换句话说,删除iter或者删除iter_free所得到的结果都是正确结果了。前面说了,删除iter所指还是比较麻烦的,那就删除iter_free所指不就好了。






实现起来不难。实质就是用复制操作来取代指针操作,可能就需要稍微权衡一下这两种操作的代价以及深复制浅复制问题,对于节点不是很复杂的链表,这个方法还是很赞的。


0 0
原创粉丝点击