两种做法:
第一种是在原链表的基础上直接删除。此时需要先把链头节点特判一下。
第二种是在原链表的表头再加一个节点,这样代码简单,并且原来的头节点就不需要特判了。
注意:循环的时候,不要直接判断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; } };
标签:力扣,203,ListNode,val,next,链表,while,节点 From: https://www.cnblogs.com/bhd123/p/17223552.html