data structures using preptr ptrptr ptr -nextpreptr -next new_nodenew_node -next ptrreturn startstruct node *insert_after(struct node *startstruct node *new_node*ptr*preptrint numvalprintf("\ enter the data ")scanf("% "&num)printf("\ enter the value after which the data has to be inserted ")scanf("% "&val)new_node (struct node *)malloc(sizeof(struct node))new_node -data numptr startpreptr ptrwhile(preptr -data !valpreptr ptrptr ptr -nextpreptr -next=new_nodenew_node -next ptrreturn startstruct node *delete_beg(struct node *startstruct node *ptrptr startstart start -nextfree(ptr)return startstruct node *delete_end(struct node *startstruct node *ptr*preptrptr startwhile(ptr -next !nullpreptr ptrptr ptr -nextpreptr -next nullfree(ptr)return startstruct node *delete_node(struct node *startstruct node *ptr*preptrint valprintf("\ enter the value of the node which has to be deleted ")scanf("% "&val)ptr startif(ptr -data =valstart delete_beg(start)return startelse