题目:
删除链表的节点(时间复杂度为O(1))
解答:
struct ListNode{
int val;
ListNode * next;
};
void DeleteNode(ListNode** pHead,ListNode* pToBedelete)
{
//链表为空或删除节点为空
if(!pHead||!pToBedelete)
return ;
//删除节点不为尾结点
if(pToBedelete->next!=NULL)
{ //定义指针指向要被删除节点的下一个节点
ListNode* p=(ListNde*)malloc(sizeof(ListNode));
p=pToBeDelete->next;
//将要被删除节点的下一个节点的值赋予被删除节点(覆盖)
pToBeDelete->val=p->val;
pToBeDelete->next=p->netx;
delete p;
p=NULL;
}
//链表节点只有一个,是尾结点
else if(*pHead=*ptoBedelete)
{
delete pToBedelete;
pToBedelete=NULL;
*pHead=NULL;
}
//链表节点有多个,是尾结点
else
{
ListNode* p=(ListNde*)malloc(sizeof(ListNode));
p=pListHead;
while(p->next!=pToBedelete)
{
p=p->next;
}
p->next=NULL;
delete pToBedelete;
pToBedelete=NULL;
}
}