首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

彻底删除循环链表有几种算法?解决思路

2012-02-08 
彻底删除循环链表有几种算法?曾经在这里提问过销毁循环链表的方法,我想寻求一个让循环链表在内存中彻底dis

彻底删除循环链表有几种算法?
曾经在这里提问过销毁循环链表的方法,我想寻求一个让循环链表在内存中彻底disappear的算法,有位朋友的解答看似可行,但用到我的程序里会出错。我的循环链表只有一个指向头结点的指针,有人说只要对头结点用free()函数就好了,不需要把每个结点都释放。我觉得这个算法肯定有问题,但又说不上来为什么请各位给解释一下,如果这种算法有效的话,还要那么麻烦的算法干什么。还有从内存中彻底删除循环链表的算法到底有几种?能不能把算法讲一下,谢谢!

[解决办法]
还能怎么释放,当然是一个一个free:
node *p = head;
node *q;
if(!p) return;
do{
q = p-> next;
free(p);
p = q;
}while(p != head);
[解决办法]
肯定不能只把头释放了,这样绝对内存泄漏。可以一个节点一个节点的释放。
node *p,*q,*flag;
p = head;
if(!p) return;
flag = head;
p = p-> next;
while(p != flag)
{
q = p-> next;
free(p);
p = q;
}
free(flag);

热点排行