Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please help! C89 Function - How to change from append_to_list to delete_from_lis

ID: 3765698 • Letter: P

Question

Please help!
C89 Function - How to change from append_to_list to delete_from_list?

Here's the struct for player:
struct player{   
   int number;
   char first_name[NAME_LEN+1];
   char last_name[NAME_LEN+1];
   struct player *next;
};

here's the struct for append_to_list:

struct player *append_to_list(struct player *roster){
   struct player *cur, *new_node;

   new_node = malloc(sizeof(struct player));
   if (new_node == NULL) {
       printf("Database is full; can't add more players. Try deleting some first ");
       return roster;
   }

   printf("Enter player number: ");
   scanf("%d", &new_node->number);

   for (cur = roster;cur != NULL;cur = cur->next)
   if (cur != NULL && new_node->number == cur->number) {
       printf("Player already exists. ");
       free(new_node);
       return roster;
   }

   printf("Enter player last name: ");
   read_line(new_node->last_name, NAME_LEN);
   printf("Enter player first name: ");
   read_line(new_node->first_name, NAME_LEN);

   if(roster == NULL){
       roster = new_node;
       return roster;
   }else{
       for(cur = roster; cur->next!= NULL; cur = cur->next);
       cur->next = new_node;
       new_node->next = NULL;
       return roster;
   }
}

How do I go about modifying append_to_list to delete_from_list?

struct player* delete_from_list(struct player *roster)

Explanation / Answer

struct player* delete_from_list(struct player *roster)
{
   int n;
   struct player *temp,*cur =roster;
   if(roster==NULL)
   {
       printf("there are no elements in the list ");
       return 0;
   }
   printf("enter player number:");
   scanf("%d",&n);
   //check if the player to be deletes is first node
   if(roster->number == n)
   {
           if(roster->next ==NULL)//there is only one node in the list
           {
               free(roster);
               return NULL;
           }
       roster = roster->next;//mover the head to next node
       free(cur);// delete the currunt head node
       return roster;

   }
   else
   {
       while(cur->next != NULL && cur->next->data != n)
       {
           cur = cur->next;
       }

       if(cur->next ==NULL)
       {
           printf("player with number = %d is not present in the list ",n);
           return roster;      
       }

       temp = cur->next;
       cur->next = cur->next->next;
       free(temp);
       return roster;

   }
}