思路
用prev,cur,next分别保存前一个节点,要删除节点,和后一个节点,然后free cur,让prev指向next。
代码
struct ListNode* removeElements(struct ListNode* head, int val){ if(head==NULL) return NULL; struct ListNode* cur=head; struct ListNode* prev=NULL; while(cur) { //如果当前节点是需要删除的节点 if(cur->val==val) { //第一个是val //先保存下一个 struct ListNode* next=cur->next; //如果当前节点是需要删除的节点 //否则让当前节点的前趋节点链接next节点 if(prev==NULL) { head=cur->next; } else//prev 连 next { prev->next=cur->next; } free(cur); cur=next; } else { //如果cur不是需要删除的节点,则更新prev,cur prev=cur; cur=cur->next; } } return head; }