双向循环链表
//双向循环链表的后删
int double_link_r_pop_back(doulink_r* PH)
{
if(*PH==NULL)
return -1;
if(*PH==(*PH)->next)
{
free(*PH);
*PH=NULL;
return 0;
}
doulink_r p=(*PH)->priv->priv;
doulink_r del=p->next;
p->next=*PH;
(*PH)->priv=p;
free(del);
del=NULL;
}
//双向循环链表的释放
int double_link_r_free(doulink_r* PH)
{
if(*PH==NULL)
return -1;
doulink_r p=*PH;
p->priv->next=NULL;
do
{
p=*PH;
*PH=(*PH)->next;
free(p);
p=NULL;
}while(*PH);
return 0;
}
双向链表
//双向链表的后删
int double_link_pop_back(doulink* PH)
{
if(*PH==NULL)
return -1;
if((*PH)->next==NULL)
{
free(*PH);
*PH=NULL;
return 0;
}
doulink p=*PH;
while(p->next->next)
{
p=p->next;
}
doulink del=p->next;
p->next=NULL;
free(del);
del=NULL;
return 0;
}
//双向链表的释放
int double_link_free(doulink* PH)
{
if(*PH==NULL)
return -1;
doulink p=*PH;
while(*PH)
{
p=*PH;
*PH=(*PH)->next;
free(p);
p=NULL;
}
}
X-mind
![](https://i-blog.csdnimg.cn/blog_migrate/e909003812453bf96347d83e54abeea2.png)