I have a program that gives me this output:

the problem is when i wanted to delete a node, it deletes it but replaces with O. I try to point the node after the node that I want to delete and after that remove the node.But I couldn't make it.Code:Enter (+) integers and terminate it by 0 1 2 3 0 The list is: 1 2 3 3 items were entered to the list Sum of the items are: 6 Enter a integer to check is it in the list:2 2 is in the list The list is: 1 2 3 Enter a number to delete it from the list:2 The list is modified The list is: 1 0 3

This is the function:

this is the all code:Code:/*Function to delete a specific number from the list*/ void delete(int n, node_ptr list) { node_ptr tmp; node_ptr current = list->next; int number; printf("Enter a number to delete it from the list:"); scanf("\n%d",&number); while(current != NULL) { if(current->data_item == number) { tmp = current->next; free (current); current = tmp; printf("The list is modified\n"); break; } else { current = current->next; } } if(current == NULL ) { printf("%d is not in the list\n", number); } return;

Code:#include <stdio.h> #include <stdlib.h> #include "1.h" /*Function to create an empty List*/ node_ptr create(void) { node_ptr list=(node_ptr)malloc(sizeof(struct node)); list->data_item = 0;/*The first node*/ list->next = NULL; /*the last node*/ return list; } /*Function to return dynamically allocated memory in list*/ void destroy(node_ptr list) { node_ptr current = list; while(current) { node_ptr to_free = current; current = current -> next; free(to_free); } } /*Function to insert n at front of list*/ void insert_at_front(int n, node_ptr list) { node_ptr new_node= (node_ptr)malloc(sizeof(struct node)); new_node -> data_item = n; new_node -> next = list-> next; list -> next = new_node; } /*Function to print list*/ void print(node_ptr list) { node_ptr current = list -> next; printf("The list is: "); while(current) { printf("%d ", current->data_item); current = current->next; } printf("\n"); } /*Function to insert n in ( non decreasing ) order in list - assuming list items are already in ( non decreasing ) order. */ void insert_in_order(int n, node_ptr list) { node_ptr before = list; node_ptr new_node = (node_ptr) malloc(sizeof(struct node)); new_node-> data_item = n; while(before-> next && (before->next->data_item < n)) { before = before->next; } new_node->next = before-> next; before->next = new_node; } /*Function to find the number of items in the list*/ int length(node_ptr list) { node_ptr current = list->next; int r = 0; while(current) { r++; current = current->next; } printf("\n%d items were entered to the list", r); return r; } /*Function to sum the integer values in the list*/ int sum(node_ptr list) { node_ptr current = list->next; int t = 0; while(current) { t = t + current->data_item; current = current->next; } printf("\nSum of the items are: %d\n", t); return t; } /*Function to find a specific number in the list*/ node_ptr find(int n, node_ptr list) { node_ptr current = list->next; int number=0; printf("Enter a integer to check is it in the list:"); scanf("\n%d",&number); while(current != NULL) { if(current->data_item == number) { printf("%d is in the list\n", number); break; } else { current = current->next; } } if(current == NULL) { printf("%d is not in the list\n", number); } return current; } /*Function to delete a specific number from the list*/ void delete(int n, node_ptr list) { node_ptr tmp; node_ptr current = list->next; int number; printf("Enter a number to delete it from the list:"); scanf("\n%d",&number); while(current != NULL) { if(current->data_item == number) { tmp = current->next; free (current); current = tmp; printf("The list is modified\n"); break; } else { current = current->next; } } if(current == NULL ) { printf("%d is not in the list\n", number); } return; }