#include struct list{ int n; struct list *p; }; void disp(struct list *t); void insert(struct list **head,int val); void del(struct list *t,struct list *pr,struct list **head); void insert(struct list **head,int val) { struct list *t,*tm = *head; if((*head) == NULL) { (*head) = (struct list* )malloc(sizeof(struct list)); // printf("\n - Start"); (*head)->n = val; (*head)->p = (*head); } else { // printf("\n - Rest"); t = (struct list* )malloc(sizeof(struct list)); t->n = val; t->p = (*head); while(tm->p != *head) tm = tm->p; tm->p = t; (*head) = t; } } void del(struct list *t,struct list *pr,struct list **h) { struct list *tmp = NULL; struct list *tm = NULL; if(t == *h) { *h = (*h)->p; pr->p = t->p; free(t); } else { pr->p = t->p; free(t); } } void disp(struct list *t) { struct list *h = t->p; printf("\nList is \n"); printf("%d ",t->n); while(h != t) { printf("%d ",h->n); h = h->p; } printf("\n"); getchar(); return; } int main() { int n =11,m=3,c=0,i=0; struct list *head = NULL; struct list *tp = NULL; struct list *prev; for(i=n;i>=1;i--) insert(&head,i); disp(head); //getchar(); c = n-1; tp = head; prev =NULL; while(c > 0) { for(i=1;ip; } printf("\n \t\t\tOut Value = %d",tp->n); del(tp,prev,&head); c--; tp = prev->p; // disp(head); // getchar(); } printf("\n\nVal - %d ",head->n); getchar(); }