单向链表的节点定义:
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_Next !=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(pToBeDelected !=nullptr)
{
delete pToBeDeleted;
pToBeDeleted =nullptr;
}
}