怎样销毁一个带头指针的循环链表?

来源:百度知道 编辑:UC知道 时间:2024/05/06 04:32:03
找了很多资料,都只有单向不循环链表的销毁方法。但是拿到这里来用好像不合适,我试了好几次都不能把带头指针的单向循环链表彻底销毁,清高手指点,谢谢!

循环链表一般都不带头结点(留下不用的空结点),因为显示不出优势。但可以有一个头指针,指向第一个结点。

对有头结点的循环链表,head指向头结点,头结节不在环中,头结点的下一个结点是环中第一个结点。于是销毁可以这样(以下采用C代码,所有变量均为同类型指针):
p1 = head->next;
for (p = p1; p->next != p1; p = pnext)
{
pnext = p->next;
free(p);
}
free(pnext); /* 最后剩下的一个 */
free(head);

如果没有头结点,head指向环中第一个元素,则可以简化为:
for (p = head; p->next != head; p = pnext)
{
pnext = p->next;
free(p);
}
free(pnext); /* 最后剩下的一个 */