class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==nullptr)
return nullptr;
head->next=removeElements(head->next,val);
if(head->val==val)
return head->next;
else{
return head;
}
}
};
注意丢弃的节点也可以删除掉
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
struct ListNode* dummyHead = new ListNode(0, head);
struct ListNode* temp = dummyHead;
while (temp->next != NULL) {
if (temp->next->val == val) {
temp->next = temp->next->next;
} else {
temp = temp->next;
}
}
delete dummyHead;
return head;
}
};
也可以两个指针一个指向dummy,一个指向head,然后一起走,但是如果那个节点是需要删除的,则不需要移动,其实和上面那个思路是一样的,反而更麻烦了