Delete all occurrences of a given key in a linked list
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++
#include <bits/stdc++.h>
using namespace std;
class Node {
public :
int data;
Node* next;
};
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;
}
Node* deleteKey(Node* head, int x)
{
if (!head)
return head;
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;
}
void printList(Node* node)
{
while (node) {
cout << node->data << " " ;
node = node->next;
}
}
int main()
{
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);
int key = 2;
cout << "Created Linked List:\n " ;
printList(head);
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;
}
|
C
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
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;
}
Node* deleteKey(Node* head, int x)
{
if (!head)
return head;
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;
}
void printList(Node* node)
{
while (node != NULL) {
printf ( " %d " , node->data);
node = node->next;
}
}
int main()
{
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;
puts ( "Created Linked List: " );
printList(head);
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
class LinkedList
{
static Node head;
class Node
{
int data;
Node next;
Node( int d)
{
data = d;
next = null ;
}
}
void deleteKey( int key)
{
Node temp = head, prev = null ;
while (temp != null && temp.data == key)
{
head = temp.next;
temp = head;
}
while (temp != null )
{
while (temp != null && temp.data != key)
{
prev = temp;
temp = temp.next;
}
if (temp == null )
return ;
prev.next = temp.next;
temp = prev.next;
}
}
public void push( int new_data)
{
Node new_node = new Node(new_data);
new_node.next = head;
head = new_node;
}
public void printList()
{
Node tnode = head;
while (tnode != null )
{
System.out.print(tnode.data + " " );
tnode = tnode.next;
}
}
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 ;
System.out.println( "Created Linked list is:" );
llist.printList();
llist.deleteKey(key);
System.out.println(
"\nLinked List after Deletion is:" );
llist.printList();
}
}
|
Python3
class Node:
def __init__( self , data):
self .data = data
self . next = None
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
def deleteKey(head_ref, key):
temp = head_ref
prev = None
while (temp ! = None and temp.data = = key):
head_ref = temp. next
temp = head_ref
while (temp ! = None ):
while (temp ! = None and temp.data ! = key):
prev = temp
temp = temp. next
if (temp = = None ):
return head_ref
prev. next = temp. next
temp = prev. next
return head_ref
def printList(node):
while (node ! = None ):
print (node.data, end = " " )
node = node. next
if __name__ = = '__main__' :
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
print ( "Created Linked List: " )
printList(head)
head = deleteKey(head, key)
print ( "\nLinked List after Deletion is: " )
printList(head)
|
C#
using System;
class GFG
{
static Node head;
public class Node
{
public int data;
public Node next;
public Node( int d)
{
data = d;
next = null ;
}
}
void deleteKey( int key)
{
Node temp = head, prev = null ;
while (temp != null && temp.data == key)
{
head = temp.next;
temp = head;
}
while (temp != null )
{
while (temp != null && temp.data != key)
{
prev = temp;
temp = temp.next;
}
if (temp == null )
return ;
prev.next = temp.next;
temp = prev.next;
}
}
public void Push( int new_data)
{
Node new_node = new Node(new_data);
new_node.next = head;
head = new_node;
}
public void printList()
{
Node tnode = head;
while (tnode != null )
{
Console.Write(tnode.data + " " );
tnode = tnode.next;
}
}
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;
Console.WriteLine( "Created Linked list is:" );
llist.printList();
llist.deleteKey(key);
Console.WriteLine(
"\nLinked List after Deletion is:" );
llist.printList();
}
}
|
Javascript
<script>
class Node {
constructor() {
this .data = 0;
this .next = null ;
}
}
function push( head, new_data)
{
var new_node = new Node();
new_node.data = new_data;
new_node.next = head;
head = new_node;
return head;
}
function deleteKey( head, x)
{
var tmp = head;
while (head.data == x)
{
head = head.next;
}
while (tmp.next != null )
{
if (tmp.next.data == x)
{
tmp.next = tmp.next.next;
}
else
{
tmp = tmp.next;
}
}
return head;
}
function printList( node)
{
while (node.next != null )
{
document.write(node.data + " " );
node = node.next;
}
document.write(node.data);
}
var 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);
let key = 2 ;
document.write( "Created Linked List: " + "</br>" );
printList(head);
head = deleteKey(head, key);
document.write( "</br>" + "Linked List after Deletion is:" + "</br>" );
printList(head);
</script>
|
Output
Created Linked List:
2 2 1 8 2 3 2 7
Linked List after Deletion is:
1 8 3 7
Time complexity: O(n)
Auxiliary Space: O(1)
Last Updated :
10 Jan, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...