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