力扣203 删除链表元素

两种做法:

第一种是在原链表的基础上直接删除。此时需要先把链头节点特判一下。

第二种是在原链表的表头再加一个节点,这样代码简单,并且原来的头节点就不需要特判了。

注意:循环的时候,不要直接判断p->val==val,最好是循环里判断p是否为空。如果while(p->val==val)  p=p->next 此时的p可能会空,会不对。

而写while(p->val==val&&p)又得分情况讨论。

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode*n=new ListNode();
        n->next=NULL;
        n->val=0;
        ListNode*p=head;
        ListNode*e=n;
        while(p){
            if(p->val==val){
                p=p->next;
            }
            else{
                e->next=p;
                e=p;
                p=p->next;
            }
        }
        e->next=NULL;
        return n->next;
    }
};

 

posted @ 2023-03-16 17:32  我的秘密小屋  阅读(21)  评论(0)    收藏  举报