Below program is in c . I want to delete the last element of list .I can't understand why it is not deleted. I am setting the last element as null in delete function which can be later seen in del variable . But the list having last element is not setting it to null.Please anyone explain.
#include <stdio.h>
typedef struct node
{
int info;
struct node *next;
}mynode;
void add(int val,mynode **head,mynode **tail);
void print(mynode *head);
void delete(mynode **head);
//mynode *head,*tail,*temp;
mynode *del;
int main(void) {
// your code goes here
mynode *root,*head,*tail,*temp;
head=(mynode*)0;
add(2,&head,&tail);
add(3,&head,&tail);
add(4,&head,&tail);
add(5,&head,&tail);
add(6,&head,&tail);
print(head);
del=tail;
delete(&head);
print(head);
return 0;
}
void add(int val,mynode **head,mynode **tail)
{
mynode *temp;
temp=(mynode*)malloc(sizeof(struct node));
temp->next=(mynode*)0;
temp->info=val;
if(*head==(mynode*)0)
{
*head=temp;
*tail=temp;
}
else
{
(*tail)->next=temp;
*tail=temp;
}
}
void print(mynode *head)
{
mynode *temp;
if(head==(mynode*)0)
{
return;
}
printf("\n\n");
for(temp=head;temp!=(mynode*)0;temp=temp->next)
{
printf("[%d]->",temp->info);
}
printf("NULL\n\n");
}
//deletes elements from linked list
void delete(mynode **head)
{
if(del==head)
{
*head=del->next;
del=(mynode*)0;
}
else if(del->next==(mynode*)0)
{
del=(mynode*)0;
}
else
{
del->info=del->next->info;
del->next=del->next->next;
del=(mynode*)0;
}
}
Output:
[2]->[3]->[4]->[5]->[6]->NULL
[2]->[3]->[4]->[5]->[6]->NULL