# include <stdio.h>
# include <stdlib.h>
typedef struct Node
{
struct Node * pNext;
int val;
bool empty; //标志位,填入值后为false,否则为true
}NODE,* PNODE;
PNODE init();
void magic(PNODE);
void traverse(PNODE);
int main()
{
PNODE pHead=init();
//traverse(pHead);
magic(pHead);
traverse(pHead);
return 0;
}
PNODE init()
{
PNODE pHead=(PNODE)malloc(sizeof(NODE));
pHead->empty=true;
pHead->pNext=NULL;
//pHead->val=1;
PNODE p=pHead;
for (int i=2;i<=13;++i)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->empty=true;
pNew->pNext=pHead;
//pNew->val=i;
p->pNext=pNew;
p=pNew;
}
return pHead;
}
void traverse(PNODE pHead)
{
PNODE p=pHead;
do
{
printf("%d ",p->val);
p=p->pNext;
} while (p!=pHead);
printf("\n");
}
void magic(PNODE pHead)
{
PNODE p=pHead;
while(pHead!=p->pNext)
p=p->pNext; //走到链表尾,为了配合算法
for (int i=1;i<=13;++i) //第一个循环是要填入的数字
{
for (int j=1;j<=i;++j) //第二个循环是为了找到位置
{
p=p->pNext; //每次走到下一个
while(!p->empty) //当前若已填充值就走到下一位置,确保不会重复填入
p=p->pNext;
}
p->empty=false; //以上为找位置,找到后就填入
p->val=i;
}
}
数据结构之魔术师的发牌
最新推荐文章于 2021-09-03 23:40:17 发布