这道题非常简单,本来不想记录的,看了别人的解法发现还有更加精妙简洁的方法,本着学习新的方法,扩展一下自己的思路,写一下。
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* Head = (struct ListNode*)malloc(sizeof(struct ListNode)), *pre, *cur;
Head->val = val - 1;
Head->next = head;
pre = Head;
cur = Head->next;
while (cur)
{
if (cur->val == val)
{
struct ListNode* temp = cur;
pre->next = cur->next;
cur=cur->next;
free(temp);
continue;
}
cur = cur->next;
pre=pre->next;
}
return Head->next;
}
struct ListNode* removeElements(struct ListNode* head, int val) {
if(!head) return NULL;
head->next=removeElements(head->next,val);
return head->val==val? head->next:head;
}
这是递归的方法,虽然不怎么使用,但是非常精简巧妙。