Remove Linked List Elements

easy linked list recursion

Problem

Given the head of a linked list and an integer val, remove all the nodes whose value is val and return the new head.

Inputhead = [1, 2, 6, 3, 4, 5, 6], val = 6
Output[1, 2, 3, 4, 5]
Use a dummy head so the head-deletion case is uniform. Walk with prev; while prev.next.val == val, splice it out; otherwise advance prev.

def remove_elements(head, val):
    dummy = ListNode(0, head)
    prev = dummy
    while prev.next:
        if prev.next.val == val:
            prev.next = prev.next.next
        else:
            prev = prev.next
    return dummy.next
function removeElements(head, val) {
  const dummy = { val: 0, next: head };
  let prev = dummy;
  while (prev.next) {
    if (prev.next.val === val) prev.next = prev.next.next;
    else prev = prev.next;
  }
  return dummy.next;
}
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummy = new ListNode(0, head), prev = dummy;
        while (prev.next != null) {
            if (prev.next.val == val) prev.next = prev.next.next;
            else prev = prev.next;
        }
        return dummy.next;
    }
}
ListNode* removeElements(ListNode* head, int val) {
    ListNode dummy(0, head), *prev = &dummy;
    while (prev->next) {
        if (prev->next->val == val) prev->next = prev->next->next;
        else prev = prev->next;
    }
    return dummy.next;
}
Time: O(n) Space: O(1)