首页 > 技术文章 > 在O(1)复杂度内删除指定节点

7ants 2013-09-02 23:11 原文

/*在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;
    }
}

 

推荐阅读