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