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

 

posted @ 2013-09-02 23:11  大器天下  阅读(235)  评论(0编辑  收藏  举报