刪除鏈表中某一個(gè)指定值的結(jié)點(diǎn)。所有結(jié)點(diǎn)的值都不同重窟。
//返回值:因?yàn)榭赡芨谋眍^指針,所以返回指針
ListNode* removeNode(ListNode* pHead, int delVal) {
// 對(duì)于表頭是空的情況感论,做特殊處理
ListNode* p=pHead;
if(p==nullptr)
return nullptr;
//對(duì)于表頭結(jié)點(diǎn)是待刪結(jié)點(diǎn)的情況做處理
if(p->val==delVal){
ListNode* newp=p->next;
delete p;
return newp;
}
//因?yàn)閯h除結(jié)點(diǎn)需要修改前驅(qū)結(jié)點(diǎn)乐横,所以遍歷的,其實(shí)是前驅(qū)結(jié)點(diǎn)
//前驅(qū)結(jié)點(diǎn)遍歷至尾結(jié)點(diǎn)時(shí)镇匀,不做處理結(jié)束循環(huán)
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;
}