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);
}