题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:
struct listNode
{
int m_nValue;
listNode * m_pNext;
};
void deleteNode( listNode ** pListHead, listNode * pToBeDeleted );
void deleteNode( listNode ** pListHead, listNode * pToBeDeleted )
{
if( NULL == *pListHead || NULL == pToBeDeleted )
return;
if( *pListHead == pToBeDeleted ) // 首结点
{
*pListHead = (*pListHead)->m_pNext;
pToBeDeleted->m_pNext = NULL;
delete pToBeDeleted;
}
else if( NULL == pToBeDeleted->m_pNext ) // 尾结点
{
listNode *pTemp = *pListHead;
while( pTemp->m_pNext != pToBeDeleted ) // 查找尾结点的前一个结点
pTemp = pTemp->m_pNext;
pTemp->m_pNext = NULL;
delete pToBeDeleted;
}
else // 中间结点
{
listNode * pNext = pToBeDeleted->m_pNext;
pToBeDeleted->m_nValue = pNext->m_nValue;
pToBeDeleted->m_pNext = pNext->m_pNext;
pNext->m_pNext = NULL;
delete pNext;
}
}