In this Leetcode Remove Linked List Elements problem solution we have Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

Leetcode Remove Linked List Elements problem solution


Problem solution in Python.

class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        arr = []
        newList = head
        newListHead = head
        while head != None:
            if head.val != val:            
                arr.append(head.val)
            head = head.next
            
        for i in range(len(arr)):
            newList.val = arr[i]
            if(i == len(arr) - 1):
                newList.next = None
            else:
                newList = newList.next
        if len(arr) == 0:
            newListHead = None
        return newListHead



Problem solution in Java.

public ListNode removeElements(ListNode head, int val)
	{
		if (head == null)
			return null;

		ListNode curr = head;
		ListNode prev = null;

		while (curr != null)
		{
			if (curr.val == val)
			{
				if (prev != null)
					prev.next = curr.next;
				else
					head = head.next;
			}
			else
			{
				prev = curr;
			}
			curr = curr.next;
		}
		return head;
	}


Problem solution in C++.

class Solution {
public:
    Solution(){
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    }
    ListNode* removeElements(ListNode* head, int val) {
        while((head != nullptr) && (head->val == val))
            head = head->next;
        ListNode *temp = head;
        while(temp != nullptr){
            ListNode *next = temp->next;
            while((next != nullptr) && (next->val == val)){
                temp->next = next->next;
                next = next->next;
            }
            temp = temp->next;
        }
        return head;
    }
};


Problem solution in C.

struct ListNode* removeElements(struct ListNode* head, int val) 
{
    struct ListNode **pp, *p;

    pp = &head;
    while (*pp) {
        p = *pp;
        if ((*pp)->val == val) { /* found one */
            *pp = p->next;
            free(p);
        } else
            pp = &p->next;
    }

    return head;
}