Description
To delete a given node from singly linked list - Case 1: check if list is empty Show message that list is empty. Case 2: When list has only one element Assign the NULL value to the head and free the memory occupied by node Case 3: When to delete first element of list Step 1: Assign the address of head to temporary variable Step 2: Assign the address of second node to the head Step 3: Free the memory occupied by first node Case 4: When to delete any other node Step 1: Traverse the list untill to reach last element Step 2: Maintain one more field to store the address of previous node Step 3: Assign the address conatined by next field of given node to address field of previous node of given node to delete. Step 4: Free the memory occupied by given node Note: Here head contains the address of first node
C/C++
/* C Program To Delete a Given Node In singly linked list */ //Save it as delete_given_node_singly_linked_list.java #include<stdio.h> #include<malloc.h> struct node *create(int); void display(struct node *); struct node *delete_given_node(struct node *); //Declaring node struct node{ int data; struct node *next; }; int main(){ int n; struct node *head; printf("Enter number of nodes : "); scanf("%d",&n); //Calling function to create node head=create(n); //Calling function to display list display(head); //Code to delete a given node head=delete_given_node(head); printf("\nThe linked list after deletion of a given node - \n"); //Calling function to display list after deletion of a given node display(head); return 0; } struct node *create(int n){ int i; struct node *head=NULL; struct node *ptr,*newNode; for(i=0;i<n;i++){ //Creating a new node newNode=(struct node*)malloc(sizeof(struct node*)); //Assigning data to newly created node printf("Enter the value of %d node : ",i+1); scanf("%d",&newNode->data); newNode->next=NULL; /*If list is empty assign the address of newly created node to head*/ if(head==NULL){ head=newNode; }else{ /* If list already have few elements then loop through list and add newly created node after given node*/ ptr=head; while(ptr->next!=NULL){ ptr=ptr->next; } ptr->next=newNode; } } return head; } void display(struct node *head){ struct node *ptr; //If list is empty if(head==NULL){ printf("The linked list is empty"); }else{ /*If list has elements then loop through the loop and print elements one by one in sequential manner*/ ptr=head; while(ptr!=NULL){ printf("The node value = %d and their address = %u\n",ptr->data,ptr); ptr=ptr->next; } } } //Function to delete a given node struct node *delete_given_node(struct node *head){ int val; struct node *preptr, *ptr; //If list has no any node give proper message if(head==NULL){ printf("\nNo node available to delete!!"); }else if(head->next==NULL){ //If node have only one node printf("Enter the value of the node to delete : "); scanf("%d",&val); ptr=head; if(val==head->data){ head=NULL; free(ptr); }else{ printf("Node cannot be deleted!!"); } }else{ printf("Enter the value of the node to delete : "); scanf("%d",&val); //If first node to be deleted if(val==head->data){ ptr=head; head=ptr->next; free(ptr); }else{ //If to delete other node ptr=head; while(ptr->data!=val){ preptr=ptr; ptr=ptr->next; } preptr->next=ptr->next; free(ptr); } } return head; }
Input: Enter number of nodes : 4 Enter the value of 1 node : 2 Enter the value of 2 node : 5 Enter the value of 3 node : 4 Enter the value of 4 node : 7 The node value = 2 and their address = 7212376 The node value = 5 and their address = 7212408 The node value = 4 and their address = 7212424 The node value = 7 and their address = 7212440 Enter the value of the node to delete : 2 Output: The linked list after deletion of a given node - The node value = 5 and their address = 7212408 The node value = 4 and their address = 7212424 The node value = 7 and their address = 7212440
Java
/* Java Program To Delete a Given Node In singly linked list */ //Save it as DeleteGivenNodeSinglyLinkedList.java import java.io.*; import java.util.Scanner; public class DeleteGivenNodeSinglyLinkedList { // Declaring node class Node { int data; Node next; public Node(int data) { this.data = data; // Assigning null value to the next field this.next = null; } } public Node head = null; // Function to add node public void addNode(int data) { // Creating a new node Node newNode = new Node(data); /* If list is empty assign the address of newly created node to head */ if (head == null) { head = newNode; } else { /* * If list already have few elements then loop through list and */ Node ptr = head; while (ptr.next != null) { ptr = ptr.next; } ptr.next = newNode; } } public void display() { Node ptr = head; // If list is empty if (ptr == null) { System.out.println("The list is empty"); return; } System.out.println("The nodes of lists are : "); /* If list has elements then loop through the loop and print elements one by one in sequential manner */ while (ptr != null) { System.out.print(ptr.data + " "); ptr = ptr.next; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); DeleteGivenNodeSinglyLinkedList list = new DeleteGivenNodeSinglyLinkedList(); System.out.println("Enter number of node you want to enter : "); int n = scanner.nextInt(); for (int i = 0; i < n; i++) { System.out.println("Enter value of " + (i + 1) + " node : "); int val = scanner.nextInt(); list.addNode(val); } // Calling function to display list list.display(); System.out.println("\nEnter the value given node to delete : "); int val=scanner.nextInt(); list.delete_given_node(val); // Calling function to display list after deletion of a given node System.out.println("\nAfter deletion of a given node - "); list.display(); } //Method to delete a given node private void delete_given_node(int val) { Node preptr = null, ptr; //If list has no node if(head==null) { System.out.println("No node available to delete!!"); } //If list has only one node else if(head.next==null) { ptr=head; head=ptr.next; } //To delete first node of list else { if(val==head.data) { ptr=head; head=ptr.next; } //To delete any node from list else { ptr=head; while(ptr.data!=val) { preptr=ptr; ptr=ptr.next; } preptr.next=ptr.next; } } } }
Input: Enter number of node you want to enter : 4 Enter value of 1 node : 2 Enter value of 2 node : 5 Enter value of 3 node : 4 Enter value of 4 node : 7 The nodes of lists are : 2 5 4 7 Enter the value given node to delete : 4 Output: After deletion of a given node - The nodes of lists are : 2 5 7
Related Programs
1) Program To Create And Display Singly Linked List2) Program To Add A Node In Beginning Of Singly Linked List
3) Program To Add A Node In The End Of Singly Linked List
4) Program To Add A Node Before A Given Node Singly Linked List
5) Program To Add A Node After A Given Node Singly Linked List
6) Program To Delete Node From Beginning Singly Linked List
7) Program To Delete Node From End Singly Linked List
8) Program To Delete Node Before Given Node Singly Linked List
9) Program To Delete Node After Given Node Singly Linked List
10) Program To Delete All Nodes Of Singly Linked List
11) Program To Sort Elements Of Singly Linked List
12) Program To Reverse Elements Singly Linked List
13) Program to Find Maximum And Minimum Value Node In Singly Linked List
14) Program to Search an Element In Singly Linked List
15) Program To Remove Duplicate Elements From Singly Linked List
16) Program To Create And Display Circular Singly Linked List
17) Program To Add A Node At The Beginning Of Circular Linked List