less than 1 minute read

<-E 203> Remove Linked List Elements

/**
 * Definition for singly-linked list.
 * 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) {}
 * };
 */

// Method 1
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        for (ListNode *prev = 0, *node = head; node; node = node->next) {
            if (node->val == val) {
                if (prev)
                    prev->next = node->next;
                else
                    head = node->next;
            } else {
                prev = node;
            }
        }
        return head;
    }
};

// Method 2
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        if(head == NULL)
            return head;
        if(head->val == val) 
            head = removeElements(head->next, val);
        else
            head->next = removeElements(head->next, val);
        return head;
    }
};