在O(1)複雜度內刪除指定節點

/*在O(1)複雜度內刪除指定節點*/
void deleteNode(LinkNode *& pHead, LinkNode * pDelNode)
{
    if(pHead == NULL)
        cout<<"鏈表爲空\n";
    if(pDelNode == NULL)
        cout<<"所刪除節點不存在\n";
    if (pDelNode != pHead && pDelNode->_next != NULL)///中間節點
    {
        LinkNode * pTemp = pDelNode->_next;
        pDelNode->_value = pDelNode->_next->_value;
        pDelNode->_next = pDelNode->_next->_next;
        delete pTemp;
        pTemp = 0;
    }
    else if (pDelNode == pHead)////被刪除的是頭結點
    {
        pHead = pDelNode->_next;
        delete pDelNode;
    }
    else if(pDelNode->_next == NULL)
    {
        LinkNode * pTemp = pHead;
        while(pTemp->_next != pDelNode)
            pTemp = pTemp->_next;
        pTemp->_next = NULL;
        delete pDelNode;
    }
}
相關文章
相關標籤/搜索