struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; class Solution { public: ListNode *removeElements(ListNode *head, int val) { if (head == nullptr) { return nullptr; } else if (head->val == val) { return removeElements(head->next, val); } else { head->next = removeElements(head->next, val); return head; } } };