时间为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仍然是一个空指针。

 

你可能感兴趣的:(代码)