在O(1)时间删除链表节点
题目描述:给定单链表的头指针和一个节点的指针,要在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;}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。