13个人围成一圈,从第一个人开始顺序报号1,2,3,要求用链表处理
#pragma warning(disable : 4996)
#include
#include
#define N 13
typedef struct People
{
int num;
struct People* next;
}human;
int main()
{
int i;
human* p;
human person[N]; //13个人
for (i = 0; i < N; i++)
{
person[i].num = i + 1;
if (i == 12)
{
person[i].next = person; //首尾地址相连
}
else
{
person[i].next = person[i + 1].next; //前面地址指向后面的地址
}
}
for (i = 0, p = person; p->next != p; p = p->next) //从第一个人开始;循环结束条件:p的指针域不能存放自身(即最后一个留在圈子里的人);p指向下一个结点
{
i++;
if (i % 2 == 0) //此时p[i]是报数报到2的人,例如:第一个报到2的人是p[1],依次类推
{
p->next = p->next->next; //此时p的下一个结点 指向 p的下下一个结点,例如:若第一个报到2的人是p[1],则p的指针域存放着下下个结点(p[3])的地址,也就是&p[1]指向p[3],跳过了p[2]
i = 0;
}
}
printf("The last one to stay in the circle:%d", p->num);
return 0;
}
引发了异常: 读取访问权限冲突。
p 是 0x7。