//链表结构如下
struct ListNode
{
int m_nvalue;
ListNode* m_pNext;
};
//往链表后加一个节点
void AddtoTail(ListNode** pHead, int value)
{
ListNode* pNew = new ListNode();
pNew -> m_nvalue = value;
pNew -> m_pNext = nullptr;
if(*pHead == nullptr)
{
*pHead = *pNew;
}
else
{
ListNode* pNode = *pHead;
while(pNode->m_pNext != nullptr)
pNode = pNode->m_pNext;
pNode->m_pNext = pNew;
}
}
//在链表中找到第一个含有某值的节点,并删除该节点
void RemoveNode(ListNode** pHead, int value)
{
if(pHead == nullptr || *pHead = nullptr)
return;
ListNode *pTOBEDeleted = nullptr;
if(*pHead->m_nvalue == value)
{
pTOBEDeleted = *pHead;
*pHead = (*pHead)->m_pNext;
}
else
{
ListNode *pNode = *pHead;
while(pNode->m_pNext != nullptr && pNode->m_pNext->m_nvalue != value)
pNode = pNode->m_pNext;
if(pNode->m_pNext != nullptr && pNode->m_pNext->m_nvalue == value)
{
pTOBEDeleted = pNode->m_pNext;
pNode->m_pNext = pNode->m_pNext->m_pNext;
}
}
if(pTOBEDeleted != nullptr)
{
delete pTOBEDeleted;
pTOBEDeleted = nullptr;
}
}