Question: Help please. Im trying to do an iterative version of deleting every node from the linked list starting from the head. I cant figure out

Help please. Im trying to do an iterative version of deleting every node from the linked list starting from the head. I cant figure out that one function

#include

#include

#include

typedef struct node

{

int data;

struct node *next;

} node;

node *create_node(int data)

{

node *new_node = malloc(sizeof(node));

if (new_node == NULL)

{

fprintf(stderr, "Error: Out of memory in create_node() ");

exit(1);

}

new_node->data = data;

new_node->next = NULL;

return new_node;

}

node *tail_insert(node *head, int data)

{

node *temp = head;

if (head == NULL)

return create_node(data);

while (temp->next != NULL)

temp = temp->next;

temp->next = create_node(data);

return head;

}

void print_list(node *head)

{

if (head == NULL)

{

printf("(empty list) ");

return;

}

printf("List = ");

while (head != NULL)

{

printf("%d%c", head->data, (head->next == NULL) ? ' ' : ' ');

head = head->next;

}

}

node *delete_alternative(node *head)

{

node *current = head;

node *temp = current->next;

if (head == NULL)

return NULL;

while(current != NULL && temp != NULL)

{

current->next = temp->next;

free(temp);

current = current->next;

if (current != NULL)

temp = current->next;

}

return head;

}

node *delete_alternative_recursive(node *head)

{

node *temp = head->next;

if (head == NULL)

return NULL;

if (temp == NULL)

return NULL;

head->next = temp->next;

free(temp);

delete_alternative(head->next);

return head;

}

node *delete_alternative_from_head(node *head)

{

node *current = head;

if (head == NULL)

return NULL;

while(current != NULL)

{

head = head->next;

free(current);

current = head;

}

return head;

}

node *delete_alternative_from_head_recursive(node *head)

{

node *current = head;

if (head == NULL || head->next == NULL)

return NULL;

head = head ->next;

free(current);

return delete_alternative(head);

}

int main(void)

{

int i;//, r;

node *head = NULL, *tail = NULL;

int a[] = {1, 5, 7, 8, 4, 12, 2, 9};

srand((unsigned int)time(NULL));

for (i = 0; i < 8; i++)

{

tail = tail_insert(tail, a[i]);

if (head == NULL)

head = tail;

}

print_list(head);

//head = delete_alternative(head);

//head = delete_alternative_recursive(head);

head = delete_alternative_from_head(head);

//head = delete_alternative_from_head_recursive(head);

print_list(head);

printf(" ");

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!