题目描述:给定单链表的头指针和一个节点的指针,要在O(1)时间内删除该节点。


链表节点的定义如下:

分析:

voidDeleteNode(ListNode**pListHead,ListNode*pToBeDeleted){if(!pListHead||!pToBeDeleted)return;//要删除的结点不是尾结点if(pToBeDeleted->m_pNext!=NULL){ListNode*pNext=pToBeDeleted->m_pNext;pToBeDeleted->m_nValue=pNext->m_nValue;pToBeDeleted->m_pNext=pNext->m_pNext;deletepNext;pNext=NULL;}//链表只有一个结点,删除头结点(也是尾结点)elseif(*pListHead==pToBeDeleted){deletepToBeDeleted;pToBeDeleted=NULL;*pListHead=NULL;}//链表中有多个结点,删除尾结点else{ListNode*pNode=*pListHead;while(pNode->m_pNext!=pToBeDeleted){pNode=pNode->m_pNext;}pNode->m_pNext=NULL;deletepToBeDeleted;pToBeDeleted=NULL;}}