时间为O(1)删除节点的代码

void RemoveNode(ListNode** pHead,int value)
{
  if(pHead==NULL||*pHead==NULL)
     return;
    ListNode*pToBeDeleted=NULL;
    if((*pHead)->m_nValue==value)
    {
        pToBeDeleted=*pHead;
        *pHead=(*pHead)->m_pNext;
    }
    else
    { 
    ListNode*pNode=*pHead;
    while(pNode->m_pNext!=NULL&&pNode->m_pNext->m_nValue!=value)
    pNode=pNode->m_pNext;
    if(pNode->m_pNext!=NULL&&pNode->m_pNext->m_nValue==value)
     {
        pToBeDeleted=pNode->m_pNext;
        pNode->m_pNext=pNode->m_pNext->m_pNext;
     } 
   }
   if(pToBeDeleted!=NULL)
   {
     delete pToBeDeleted;
     pToBeDeleted=NULL;
   }  
}

上面代码中,我们要特别注意函数的第一个参数pHead是一个指向指针的指针,当我们往一个空链表中插入一个节点是,新插入的节点就是链表的头指针。由于此时会改动头指针,因此必须把pHead参数设为指向指针的指针,否则出了这个函数pHead仍然是一个空指针。

 

posted @ 2013-04-21 21:00  liyunyu1  阅读(184)  评论(0编辑  收藏  举报