To delete a node from the singly linked list.

To delete a node from the singly linked list.

Question:

Write a program to delete a specific node from the singly linked list.

Logic:

  • Get all nodes from the user.
  • Then get the deleting element also from the user.
  • Call the delete() function to remove the node.
  • Search for the previous node and also next of deleting a node.
  • If the deleting element is head then make next as a head.
  • Otherwise, change the next of the previous node as next of deleting a node.
  • Then print list after deletion.

Program:

#include<stdio.h>
#include<stdlib.h>
void display();
int delete(int);
struct node
{
        int data;
        struct node *next;
}*head;
int main()
{
    int n,i,a;
    typedef struct node Node;
    head=(Node*)malloc(sizeof(Node));
    Node *tem;
    Node *new;
    printf("enter no of nodes:");
    scanf("%d",&n);
    if(n>0)                         //gets the first node of the linked list
    {
        printf("enter the values:");
        scanf("%d",&a);
        head->data=a; 
        head->next=NULL;
        tem=head;
    }
    for(i=1;i<n;i++)               //get the remaining nodes of the linked list
    {
        new=(Node*)malloc(sizeof(Node));
        scanf("%d",&a);
        new->data=a;
        new->next=NULL;
        tem->next=new;
        tem=tem->next;
    }
    if(n>0)
    {
        printf("enter the element to delete:");
        scanf("%d",&a);
        printf("List before deletion:");
        display();               //display function can display the node in list
        i=delete(a);            
        if(i==1)
        {
            printf("List after deletion:");
            display();           //display after deletion
        }
    }
	free(head);                  //free memory which is allocated
	free(new);
}
void display()
{
    struct node *temp;
    temp=head;
    if(temp==NULL)             //when list has no nodes
        printf("list is empty");
    else
    {
        while(temp!=NULL)      //print all the nodes
        {
            printf("%d ",temp->data);
            temp=temp->next;
        }printf("\n");
    }
}
int delete(int a)
{
    struct node *temp,*prev;
    temp=head;
    if(temp->data==a)      //deleting element is found at head
    {
        temp=temp->next;
        head=temp;
        return 1;
    }
    if(head!=NULL)
    {
        while(temp!=NULL&&temp->data!=a) //gets previous node and next of deleting element
        {
            prev=temp;
            temp=temp->next;
        }
        if(temp==NULL)                  //deleting element not found
        {
            printf("Deleting element was not found in the list");
            return 0;
        }
        prev->next=temp->next;         //changes the next of previous
        return 1;
    }
    printf("list is empty");
    return 0;
}

You might also like:

Insert A Node At A Specific Position In LinkedList

 

Follow For Instant Updates

Join WhatsApp Group: link
Join our Telegram Channel: link
Like our Facebook Page:  link
Subscribe to our Youtube channel: link

Vignesh

A Computer Science graduate who likes to make things simpler. When he’s not working, you can find him surfing the web, learning facts, tricks and life hacks. He also enjoys movies in his leisure time.
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x