题目描述:
给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点
void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
{
if(!pListHead || !pToBeDeleted)
return;
//讨论待删除节点是否是尾节点
if(pToBeDeleted -> next != nullptr)
{
ListNode* pNext = pToBeDeleted -> next;
pToBeDeleted -> next = pNext -> next;
pToBeDeleted -> val = pNext -> val;
delete pNext;
pNext = nullptr;
}
else if(*pListHead == pToBeDeleted)//既是尾节点又是头节点
{
delete pToBeDeleted;
pToBeDeleted = nullptr;
*pListHead = nullptr;
}
else//只是尾节点
{
ListNode* pNode = *pListHead;
while(pNode -> next != pToBeDeleted)//遍历至尾节点
{
pNode = pNode -> next;
}
pNode -> next = nullptr;
delete pToBeDeleted;
pToBeDeleted = nullptr;
}
}