从单链表中删除一个节点,除了尾节点都是O(1)操作
bool delete_node(node *&head, node *p)
{
if(!p || !head)
return false;
if(p->m_pNext != NULL) //不是尾指针
{
node *del = p->m_pNext;
p->m_nValue = del->m_nValue;
p->m_pNext = del->m_pNext;
delete del;
del = NULL;
}
else if(head == p) //是尾指针,同时只有一个结点
{
delete p;
head = NULL;
}
else //是尾指针,同时有多个结点
{
node *tmp = NULL, *pre = head;
while(pre&&pre->m_pNext != p)
{
pre = pre->m_pNext;
}
delete p;
p = NULL;
pre->m_pNext = NULL;
}
return true;
}