struct ListNode
{
int value;
ListNode* next;
};
void DeleteNode(ListNode** pHead, ListNode* pToBeDeleted)
{
//判断输入
if (!pHead || !pToBeDeleted)
return;
//当要删除的结点不是尾节点时
if (pToBeDeleted->next != nullptr)
{
//把结点pNext指向要删除的结点的下一个结点
ListNode* pNext = pToBeDeleted->next;
//把pNext的值赋给要删除的结点ToBeDeleted,同时指向pNext的下个结点
pToBeDeleted->value = pNext->value;
pToBeDeleted->next = pNext->next;
//删除要删除的结点并置空
delete pToBeDeleted;
pToBeDeleted = nullptr;
}
//当只有一个结点时,直接把该结点删除同时置空
else if (*pHead == pToBeDeleted)
{
delete pToBeDeleted;
*pHead = nullptr;
pToBeDeleted = nullptr;
}
//当要删除的结点是尾节点时
else
{
//遍历到指向要删除的结点即最后一个结点
ListNode* pNode = *pHead;
while (pNode->next != pToBeDeleted)
pNode = pNode->next;
//pNode指向空结点,同时删除最后一个结点并置空
pNode->next = nullptr;
delete pToBeDeleted;
pToBeDeleted = nullptr;
}
}