# Delete all occurrences of a given key in a linked list

• Difficulty Level : Easy
• Last Updated : 25 Apr, 2022

Given a singly linked list, delete all occurrences of a given key in it. For example, consider the following list.

Example:

```Input: 2 -> 2 -> 1 -> 8 -> 2 ->  3 -> 2 -> 7
Key to delete = 2
Output:  1 -> 8 -> 3 -> 7 ```

This is mainly an extension of this post which deletes the first occurrence of a given key
We need to first check for all occurrences at the head node and change the head node appropriately. Then we need to check for all occurrences inside a loop and delete them one by one.

Below is the implementation of the above idea:

## C++

 `// C++ program to delete all occurrences``// of a given key in linked list``#include ``using` `namespace` `std;` `// A linked list node``class` `Node {``public``:``    ``int` `data;``    ``Node* next;``};` `// Given a reference (pointer) to the head``// of a list and an int, inserts a new node``// on the front of the list``Node* push(Node* head, ``int` `new_data)``{``    ``Node* new_node = ``new` `Node();``    ``new_node->data = new_data;``    ``new_node->next = head;``    ``head = new_node;``    ``return` `head;``}` `// Given a reference (pointer)to the head``// of a list and a key, deletes all``// occurrence of the given key in``// linked list``Node* deleteKey(Node* head, ``int` `x)``{``    ``// In Linked List is empty Just return it``    ``if` `(!head)``        ``return` `head;``    ``// Until the head data is equal to the key move the head``    ``// pointer``    ``while` `(head && head->data == x)``        ``head = head->next;``    ``Node *curr = head, *prev = nullptr;` `    ``while` `(curr) {``        ``if` `(curr->data == x)``            ``prev->next = curr->next;``        ``else``            ``prev = curr;``        ``curr = curr->next;``    ``}``    ``return` `head;``}` `// This function prints contents of``// linked list starting from the``// given node``void` `printList(Node* node)``{``    ``while` `(node) {``        ``cout << node->data << ``" "``;``        ``node = node->next;``    ``}``}` `// Driver code``int` `main()``{` `    ``// Start with the empty list``    ``Node* head = NULL;``    ``head = push(head, 7);``    ``head = push(head, 2);``    ``head = push(head, 3);``    ``head = push(head, 2);``    ``head = push(head, 8);``    ``head = push(head, 1);``    ``head = push(head, 2);``    ``head = push(head, 2);` `    ``// Key to delete``    ``int` `key = 2;``    ``cout << ``"Created Linked List:\n "``;``    ``printList(head);``    ``// Function call``    ``head = deleteKey(head, key);` `    ``if` `(!head)``        ``cout << ``"\nNo element present in the Linked list"``             ``<< endl;``    ``else` `{``        ``cout << ``"\nLinked List after Deletion is:\n"``;``        ``printList(head);``    ``}``    ``return` `0;``}` `// This code is contributed by Aditya Kumar (aditykumar129)`

## C

 `// C Program to delete all occurrences of a given key in``// linked list``#include ``#include ` `// A linked list node``typedef` `struct` `Node {``    ``int` `data;``    ``struct` `Node* next;``} Node;` `/* Given a reference (pointer to pointer) to the head of a``   ``list and an int, inserts a new node on the front of the``   ``list. */``void` `push(``struct` `Node** head_ref, ``int` `new_data)``{``    ``struct` `Node* new_node``        ``= (``struct` `Node*)``malloc``(``sizeof``(``struct` `Node));``    ``new_node->data = new_data;``    ``new_node->next = (*head_ref);``    ``(*head_ref) = new_node;``}` `/* Given a reference (pointer to pointer) to the head of a``   ``list and a key, deletes all occurrence of the given key``   ``in linked list */``Node* deleteKey(Node* head, ``int` `x)``{``    ``if` `(!head)``        ``return` `head;``    ``// Until the head data is equal to the key move the head``    ``// pointer``    ``while` `(head && head->data == x)``        ``head = head->next;``    ``Node *curr = head, *prev = NULL;``    ``while` `(curr) {``        ``if` `(curr->data == x)``            ``prev->next = curr->next;``        ``else``            ``prev = curr;``        ``curr = curr->next;``    ``}``    ``return` `head;``}` `// This function prints contents of linked list starting``// from the given node``void` `printList(Node* node)``{``    ``while` `(node != NULL) {``        ``printf``(``" %d "``, node->data);``        ``node = node->next;``    ``}``}` `// Driver code``int` `main()``{``    ``// Start with the empty list``    ``struct` `Node* head = NULL;` `    ``push(&head, 7);``    ``push(&head, 2);``    ``push(&head, 3);``    ``push(&head, 2);``    ``push(&head, 8);``    ``push(&head, 1);``    ``push(&head, 2);``    ``push(&head, 2);` `    ``int` `key = 2; ``// key to delete` `    ``puts``(``"Created Linked List: "``);``    ``printList(head);` `    ``// Function call``    ``head = deleteKey(head, key);``    ``if` `(!head)``        ``printf``(``"\nNo element present in the Linked list\n"``);``    ``else` `{``        ``printf``(``"\nLinked List after Deletion is:\n"``);``        ``printList(head);``    ``}``    ``return` `0;``}`

## Java

 `// Java Program to delete all occurrences``// of a given key in linked list``class` `LinkedList``{``    ``static` `Node head; ``// head of list` `    ``/* Linked list Node*/``    ``class` `Node``    ``{``        ``int` `data;``        ``Node next;``        ``Node(``int` `d)``        ``{``            ``data = d;``            ``next = ``null``;``        ``}``    ``}` `    ``/* Given a key, deletes all occurrence``    ``of the given key in linked list */``    ``void` `deleteKey(``int` `key)``    ``{``        ``// Store head node``        ``Node temp = head, prev = ``null``;` `        ``// If head node itself holds the key``        ``// or multiple occurrences of key``        ``while` `(temp != ``null` `&& temp.data == key)``        ``{``            ``head = temp.next; ``// Changed head``            ``temp = head; ``// Change Temp``        ``}` `        ``// Delete occurrences other than head``        ``while` `(temp != ``null``)``        ``{``            ``// Search for the key to be deleted,``            ``// keep track of the previous node``            ``// as we need to change 'prev->next'``            ``while` `(temp != ``null` `&& temp.data != key)``            ``{``                ``prev = temp;``                ``temp = temp.next;``            ``}` `            ``// If key was not present in linked list``            ``if` `(temp == ``null``)``                ``return``;` `            ``// Unlink the node from linked list``            ``prev.next = temp.next;` `            ``// Update Temp for next iteration of outer loop``            ``temp = prev.next;``        ``}``    ``}` `    ``/* Inserts a new Node at front of the list. */``    ``public` `void` `push(``int` `new_data)``    ``{``        ``Node new_node = ``new` `Node(new_data);``        ``new_node.next = head;``        ``head = new_node;``    ``}` `    ``/* This function prints contents of linked list``    ``starting from the given node */``    ``public` `void` `printList()``    ``{``        ``Node tnode = head;``        ``while` `(tnode != ``null``)``        ``{``            ``System.out.print(tnode.data + ``" "``);``            ``tnode = tnode.next;``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``LinkedList llist = ``new` `LinkedList();` `        ``llist.push(``7``);``        ``llist.push(``2``);``        ``llist.push(``3``);``        ``llist.push(``2``);``        ``llist.push(``8``);``        ``llist.push(``1``);``        ``llist.push(``2``);``        ``llist.push(``2``);` `        ``int` `key = ``2``; ``// key to delete` `        ``System.out.println(``"Created Linked list is:"``);``        ``llist.printList();` `        ``// Function call``        ``llist.deleteKey(key);` `        ``System.out.println(``            ``"\nLinked List after Deletion is:"``);``        ``llist.printList();``    ``}``}` `// This code is contributed by Shubham`

## Python3

 `# Python3 program to delete all occurrences``# of a given key in linked list` `# Link list node`  `class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.``next` `=` `None` `# Given a reference (pointer to pointer)``# to the head of a list and an int,``# inserts a new node on the front of the list.`  `def` `push(head_ref, new_data):``    ``new_node ``=` `Node(``0``)``    ``new_node.data ``=` `new_data``    ``new_node.``next` `=` `(head_ref)``    ``(head_ref) ``=` `new_node``    ``return` `head_ref` `# Given a reference (pointer to pointer)``# to the head of a list and a key,``# deletes all occurrence of the given key``# in linked list`  `def` `deleteKey(head_ref, key):` `    ``# Store head node``    ``temp ``=` `head_ref``    ``prev ``=` `None` `    ``# If head node itself holds the key``    ``# or multiple occurrences of key``    ``while` `(temp !``=` `None` `and` `temp.data ``=``=` `key):``        ``head_ref ``=` `temp.``next`  `# Changed head``        ``temp ``=` `head_ref         ``# Change Temp` `    ``# Delete occurrences other than head``    ``while` `(temp !``=` `None``):` `        ``# Search for the key to be deleted,``        ``# keep track of the previous node``        ``# as we need to change 'prev.next'``        ``while` `(temp !``=` `None` `and` `temp.data !``=` `key):``            ``prev ``=` `temp``            ``temp ``=` `temp.``next` `        ``# If key was not present in linked list``        ``if` `(temp ``=``=` `None``):``            ``return` `head_ref` `        ``# Unlink the node from linked list``        ``prev.``next` `=` `temp.``next` `        ``# Update Temp for next iteration of outer loop``        ``temp ``=` `prev.``next``    ``return` `head_ref` `# This function prints contents of linked list``# starting from the given node`  `def` `printList(node):``    ``while` `(node !``=` `None``):``        ``print``(node.data, end``=``" "``)``        ``node ``=` `node.``next`  `# Driver Code``if` `__name__ ``=``=` `'__main__'``:` `    ``# Start with the empty list``    ``head ``=` `None` `    ``head ``=` `push(head, ``7``)``    ``head ``=` `push(head, ``2``)``    ``head ``=` `push(head, ``3``)``    ``head ``=` `push(head, ``2``)``    ``head ``=` `push(head, ``8``)``    ``head ``=` `push(head, ``1``)``    ``head ``=` `push(head, ``2``)``    ``head ``=` `push(head, ``2``)` `    ``key ``=` `2`  `# key to delete` `    ``print``(``"Created Linked List: "``)``    ``printList(head)` `    ``# Function call``    ``head ``=` `deleteKey(head, key)``    ``print``(``"\nLinked List after Deletion is: "``)` `    ``printList(head)` `# This code is contributed by Arnab Kundu`

## C#

 `// C# Program to delete all occurrences``// of a given key in linked list``using` `System;` `class` `GFG``{``    ``static` `Node head; ``// head of list` `    ``/* Linked list Node*/``    ``public` `class` `Node``    ``{``        ``public` `int` `data;``        ``public` `Node next;``        ``public` `Node(``int` `d)``        ``{``            ``data = d;``            ``next = ``null``;``        ``}``    ``}` `    ``/* Given a key, deletes all occurrence``    ``of the given key in linked list */``    ``void` `deleteKey(``int` `key)``    ``{``        ``// Store head node``        ``Node temp = head, prev = ``null``;` `        ``// If head node itself holds the key``        ``// or multiple occurrences of key``        ``while` `(temp != ``null` `&& temp.data == key)``        ``{``            ``head = temp.next; ``// Changed head``            ``temp = head; ``// Change Temp``        ``}` `        ``// Delete occurrences other than head``        ``while` `(temp != ``null``)``        ``{``            ``// Search for the key to be deleted,``            ``// keep track of the previous node``            ``// as we need to change 'prev->next'``            ``while` `(temp != ``null` `&& temp.data != key)``            ``{``                ``prev = temp;``                ``temp = temp.next;``            ``}` `            ``// If key was not present in linked list``            ``if` `(temp == ``null``)``                ``return``;` `            ``// Unlink the node from linked list``            ``prev.next = temp.next;` `            ``// Update Temp for next iteration of outer loop``            ``temp = prev.next;``        ``}``    ``}` `    ``/* Inserts a new Node at front of the list. */``    ``public` `void` `Push(``int` `new_data)``    ``{``        ``Node new_node = ``new` `Node(new_data);``        ``new_node.next = head;``        ``head = new_node;``    ``}` `    ``/* This function prints contents of linked list``    ``starting from the given node */``    ``public` `void` `printList()``    ``{``        ``Node tnode = head;``        ``while` `(tnode != ``null``)``        ``{``            ``Console.Write(tnode.data + ``" "``);``            ``tnode = tnode.next;``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``GFG llist = ``new` `GFG();` `        ``llist.Push(7);``        ``llist.Push(2);``        ``llist.Push(3);``        ``llist.Push(2);``        ``llist.Push(8);``        ``llist.Push(1);``        ``llist.Push(2);``        ``llist.Push(2);` `        ``int` `key = 2; ``// key to delete` `        ``Console.WriteLine(``"Created Linked list is:"``);``        ``llist.printList();` `        ``// Function call``        ``llist.deleteKey(key);` `        ``Console.WriteLine(``            ``"\nLinked List after Deletion is:"``);``        ``llist.printList();``    ``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output
```Created Linked List:
2  2  1  8  2  3  2  7