Here is the C program to delete an element from a singly linked list.
#include
#include
struct node{
int val;
struct node *next;
};
struct node * find_node(struct node *head, int val)
{
struct node *tmp = head;
while(tmp)
{
if (tmp->val == val) return tmp; /*Found*/
tmp = tmp->next;
}
return NULL; /*Not found*/
}
void print_list(struct node *head)
{
printf("H->");
while(head)
{
printf("%d->", head->val);
head = head->next;
}
printf("|||\n");
}
void insert_front(struct node **head, int value)
{
struct node * new_node = NULL;
new_node = (struct node *)malloc(sizeof(struct node));
if (new_node == NULL)
{
printf("Failed to insert element. Out of memory");
}
new_node->val = value;
new_node->next = *head;
*head = new_node;
}
void delete_elem(struct node **head, int val)
{
struct node * del = find_node(*head, val);
struct node * tmp = NULL;
if (del == NULL) return;
if (*head == del)
{
*head = del->next;
}
else
{
tmp = *head;
while(tmp->next != del) tmp = tmp->next;
tmp->next = del->next;
}
free(del);
}
void main()
{
int count = 0, i, val;
struct node * head = NULL;
printf("Enter number of elements: ");
scanf("%d", &count);
for (i = 0; i < count; i++)
{
printf("Enter %dth element: ", i);
scanf("%d", &val);
insert_front(&head, val);
}
printf("Initial List: ");
print_list(head);
printf("Enter a value to delete from the list: ");
scanf("%d", &val);
delete_elem(&head, val);
printf("List after deletion: ");
print_list(head);
}Output:
Enter number of elements: 5 Enter 0th element: 43 Enter 1th element: 5 Enter 2th element: 10 Enter 3th element: 23 Enter 4th element: 78 Initial List: H->78->23->10->5->43->||| Enter a value to delete from the list: 10 List after deletion: H->78->23->5->43->|||
The post Delete an element from a singly linked list appeared first on QnA Plus.