Hello friends!!!!!

Singly Linked List

#include <stdio.h>

#include <stdlib.h>

typedef struct node

{

int data;

struct Node* link;

}Node;

Node* create_Node(int data)

{

Node* new_Node;

new_Node = (Node*)malloc(sizeof(Node));

if(new_Node == NULL)

{

printf("Memory allocation failed!\n");

exit(1);

}

new_Node->data = data;

new_Node->link = NULL;

return new_Node;

}

void insert_at_begin(Node** head, int data)

{

Node* new_Node = create_Node(data);

new_Node->link = *head;

*head = new_Node;

}

void insert_at_last(Node** head, int data)

{

Node* temp;

Node* new_Node = create_Node(data);

if(*head == NULL)

{

*head = new_Node;

}

else

{

temp = *head;

while(temp->link != NULL)

{

temp = temp->link;

}

temp->link = new_Node;

}

}

int delete_Node(Node** head, int target)

{

Node* temp; int d;

Node* prev;

if(*head == NULL)

{

printf("List is empty.\n");

return(-1);

}

else

{

temp = *head;

if(temp != NULL && temp->data == target)

{

*head = temp->link; // Change head

d = temp->data;

free(temp); // Free memory

return(d);

}

else

{

prev = NULL;

while(temp != NULL && temp->data != target)

{

prev = temp;

temp = temp->link;

}

if(temp == NULL)

{

printf("Node with data %d not found.\n", target);

d = -1;

}

else

{

prev->link = temp->link;

d = temp->data;

free(temp);

}

return d;

}

}

}

// Function to display the linked list

void display(Node* head)

{

Node* temp;

if(head == NULL)

{

printf("List is empty.\n");

return;

}

temp = head;

while(temp != NULL)

{

printf("%d -> ", temp->data);

temp = temp->link;

}

}

void main()

{

Node* head = NULL;

insert_at_begin(&head, 10);

insert_at_begin(&head, 20);

insert_at_last(&head, 30);

insert_at_last(&head, 40);

printf("Linked List: \n");

display(head);

delete_Node(&head, 20);

printf("Linked List after deletion: \n");

display(head);

}