力扣
法 1 用删除的思路
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode *cur = head; struct ListNode *prev = NULL; while(cur != NULL) { if(cur->val == val) { if(cur == head) { head = cur->next; free(cur); cur = head; } else { prev->next = cur->next; free(cur); cur = prev->next; } } else { prev = cur; cur = cur->next; } } return head; }
法 2 用尾插的思路
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode* cur = head; struct ListNode* tail = NULL; head = NULL; while (cur) { if (cur->val != val) { if (tail == NULL) { head = tail = cur; } else { tail->next = cur; tail = tail->next; } cur = cur->next; } else { struct ListNode* del = cur; cur = cur->next; free(del); } } if (tail) { tail->next = NULL; } return head; }
head 置空,是出现7-7-7-7现象,要返回NULL。