typedef struct NAME{
char *name;
struct NAME *pre;//构造出两个链表节点
struct NAME *next;
}T_Name, *PT_Name;
static PT_Name g_ptNameHead;//定义一个链表头
void del_name(PT_Name ptDel)
{
PT_Name ptCur;
PT_Name ptPre;
PT_Name ptNext;
if (g_ptNameHead == ptDel)
{
g_ptNameHead = ptDel->next;//删除表头
return;
}
else
{
ptCur = g_ptNameHead->next;
while (ptCur)
{
if (ptCur == ptDel)
{
/* 从链表中删除 */
ptPre = ptCur->pre;//先将要删除节点的两边分别初始化为ptPre,ptNext
ptNext = ptCur->next;
ptPre->next = ptNext;//然后再删除当前节点
if (ptNext) //判断是不是链表尾部
{
ptNext->pre = ptPre;
}
break;
}
else
{
ptCur = ptCur->next;
}
}
}
free(ptDel->name); //释放两次,一次是节点元素name(因为其是指针?),一次是整个节点
free(ptDel);
}
双向链表删除节点
最新推荐文章于 2023-12-06 16:14:04 发布