void AddToTail(ListNode ** pHead,int value)
{
ListNode * pNew=new ListNode();
pNew->m_nValue=value;
pNew->m_pNext=NULL;
if(*pHead==NULL)
{
*pHead=pNew;
}
else
{
ListNode * pNode = *pHead;
while(pNode->m_pNext != NULL)
pNode=pNode->m_pNext;
pNode->m_pNext=pNew;
}
}
void RemoveNode1(ListNode **pHead,int value)
{
if(pHead == NULL || *pHead ==NULL)
return;
ListNode * pToBeDeleted=NULL;
//特殊处理第一个结点即为要删除的结点,注意括号的使用
if((*pHead)->m_nValue == value)
{
pToBeDeleted=*pHead;
*pHead=(*pHead)->m_pNext;
}
else
{
ListNode * pNode=*pHead;
while(pNode->m_pNext!=NULL && pNode->m_pNext->m_nValue!=value)
pNode=pNode->m_pNext;
if(pNode->m_pNext!=NULL && pNode->m_pNext->m_nValue==value)
{
pToBeDeleted=pNode->m_pNext;
pNode->m_pNext=pNode->m_pNext->m_pNext;
}
}
if(pToBeDeleted !=NULL)
{
delete pToBeDeleted;
//这一步很重要,防止操作已经释放的内存空间
pToBeDeleted=NULL;
}
}