删除链表中某一个指定值的结点。所有结点的值都不同。
//返回值:因为可能更改表头指针,所以返回指针
ListNode* removeNode(ListNode* pHead, int delVal) {
// 对于表头是空的情况,做特殊处理
ListNode* p=pHead;
if(p==nullptr)
return nullptr;
//对于表头结点是待删结点的情况做处理
if(p->val==delVal){
ListNode* newp=p->next;
delete p;
return newp;
}
//因为删除结点需要修改前驱结点,所以遍历的,其实是前驱结点
//前驱结点遍历至尾结点时,不做处理结束循环
while(p->next!=nullptr){
if(p->next->val==delVal){
ListNode* delp=p->next;
p->next=delp->next;
delete delp;
return pHead;
}else
p=p->next;
}
return pHead;
}