题目:给定单项链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
//链表的结构如下
struct ListNode
{
int m_nvalue;
ListNode* m_pnext;
};
void DeleteNode(ListNode** pListHead , ListNode* pTodelete)
{
if(!pListHead || !pTodelete)
return ;
//要删除的不是尾节点
if(pTodelete->m_pnext != NULL)
{
ListNode* pnext = pTodelete->m_pnext;
pTodelete->m_nvalue = pnext->m_nvalue;
pTodelete->m_pnext = pnext->m_pnext;
delete pnext;
pnext = NULL;
}
//链表中只有一个结点
else if(*pListHead == pTodelete)
{
delete pTodelete;
*pListHead = NULL;
pTodelete = NULL;
}
//链表中不止有一个元素,删除尾节点
else
{
ListNode* pnext = *pListHead;
while(pnext->m_pnext != pTodelete)
{
pnext = pnext->m_pnext;
}
delete pTodelete;
pTodelete = NULL;
pnext->m_pnext = NULL;
}
}