链表一个小小的练习

删除链表中某一个指定值的结点。所有结点的值都不同。

//返回值:因为可能更改表头指针,所以返回指针
    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;
    }

你可能感兴趣的:(链表一个小小的练习)