链表实现123报数游戏

基本思想:建立循环链表,并在所有节点数据域中赋值为0;建立while循环,判出条件为n(节点个数)减到1

#include
#include

typedef struct Node
{
    int order;
    int num;
    struct Node* next;
}LinkNode,*LinkList;
void print(LinkNode* L)
{
    LinkList p;
    p=L;
    while(p->next!=L)
    {
        printf("\n%d  %d\n",p->order,p->num);
        p=p->next;
    }
    p=p->next;
    printf("\n%d  %d\n",p->order,p->num);
}
int main()
{
    LinkList L=(LinkList )malloc(sizeof(LinkNode));
    L->order=1,L->num=0;
    L->next=L;
    LinkList p1,p2,p;
    int i=0,n,k=1,l=0;
    scanf("%d",&n);
    while(1)
    {
        LinkList p1=(LinkList )malloc(sizeof(LinkNode));
        i++;
        p1->order=i+1;
        p1->num=0;
        if(L->next==L)
        {
            L->next=p1;
            p1->next=L;
        }
        else
        {
            p2->next=p1;
            p1->next=L;
        }
        p2=p1;
        if(i==n-1)
            break;
    }
    p=L;
    while(n>1)
    {  
        if(p->num==0)
        {
            if(k==3)
            {
                n--;
                p->num=3;
                p=p->next;
                k=1;
            }
            else
            {
                p=p->next;
                k++;
            }
        }
        else
            p=p->next;
     /*   printf("**************第%d次*****************\n",++l);
        printf("%d\n",k);
        print(L);*/
    }
    p=L;
    while(p->num==3)
    {
        p=p->next;
    }
    if(p->num==0)
        printf("胜利者为%d号\n",p->order);
}

你可能感兴趣的:(C语言学习)