约瑟夫问题
n 个人围成一个圆圈,首先第1个人从1开始一个人一个人顺时针报数, 报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去, 直到圆圈中只剩一个人为止。此人即为优胜者。
例如 n = 8 m = 3
对于这个问题我们用完全可以用循环队列来解决,但是这里我们为了加深一下对链表的操作,我们来用单循环链表来解决。很好类比,单循环链表也是一个圈,我们完全可以用它来模拟这个队伍。
定义结点、
// typedef struct Node { int data; struct Node* pNext; } Node,*PNODE; //
为了还原,这里我就没有添加头结点,同时也避免了循环时对头结点的判断,避免了产生与普通数据结点不同的操作,保证所有结点都一样,操作没有差别。