#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define N 13
struct quan
{
int num;
struct quan *next;
};
struct quan *create()
{
int i=1;
struct quan *head,*p1,*p2;
head=NULL;
p1=p2=(struct quan *)malloc(sizeof(struct quan));
p1->num=i++;
while(p1->num<=N)
{
if(p1->num==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct quan *)malloc(sizeof(struct quan));
p1->num=i++;
}
p2->next=head;
return head;
}
int get_len(struct quan *head)
{
int len=1;
struct quan *p;
p=head->next;
while(p!=head)
{
len++;
p=p->next;
}
return len;
}
int cal(struct quan *head)
{
int j;
struct quan *p1,*p2;
p1=p2=head;
while(get_len(head)!=1)
{
printf("length:%5d",get_len(head));
for(j=1;j<=3;j++)
{
if(j==3)
{
p2->next=p1->next;
if(p1==head) head=p1->next;
printf("\terase:%5d\n",p1->num);
free(p1);
p1=p2->next;
p2=p1;
}
else
{
p2=p1;
p1=p1->next;
}
}
}
return head->num;
}
int main()
{
int s;
struct quan *head;
head=create();
s=cal(head);
printf("end:%d\n",s);
return 0;
}