//删除链表指定结点,并且复杂度为o(1).
#include <iostream>
using namespace std;
struct ListNode
{
int m_nvalue;
ListNode *m_pNext;
};
//删除指定结点
void DeleteNode(ListNode **pHead,ListNode *pToBeDeleteNode)
{
if(pHead==NULL||pToBeDeleteNode==NULL)
return;
//要删除的结点不是尾结点
if(pToBeDeleteNode->m_pNext!=NULL)
{
ListNode* pNext=pToBeDeleteNode->m_pNext;//被删除结点的下一个结点
pToBeDeleteNode->m_nvalue=pNext->m_nvalue;//复制覆盖
pToBeDeleteNode->m_pNext=pNext->m_pNext;
delete pNext;
pNext=NULL;
}
//删除结点等于头结点
else if(*pHead==pToBeDeleteNode)
{
//删除结点的方法
delete pToBeDeleteNode;
pToBeDeleteNode=NULL;
//记得将头结点置空
*pHead=NULL;
}
//要删除尾结点
else
{
ListNode *pNode=*pHead;
while(pNode->m_pNext!=pToBeDeleteNode)
pNode=pNode->m_pNext;
pNode->m_pNext=NULL;
delete pToBeDeleteNode;//删除尾结点
pToBeDeleteNode=NULL;
}
}
剑指offfer--删除链表的指定结点
最新推荐文章于 2019-09-21 20:38:23 发布