约瑟夫环循环链表的实现出现一个很奇葩的现象,求围观,求解释
代码如下,
#include <STDIO.H>
#include <MALLOC.H>
#include <iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}node;
void Josephus(int n, int k, int m)
{
node *head;
node *pre;
node *curr;
node *temp;
head = ( node *)malloc(sizeof(node)) ;
head->next = head;
head->data = 0;
curr = head;
for (int i=1; i<n; ++i)
{
temp = ( node *)malloc(sizeof(node)) ;
temp->data = i;
temp->next = curr->next;
curr->next = temp;
curr = temp;
}
curr = head;
while (k--)
{
pre = curr;
curr = curr->next;
}
while (n--)
{
for (int s=m-1; --s; pre=curr,curr=curr->next)
;
pre->next = curr->next;
cout<<curr->data<<endl;
delete curr;
curr = pre->next;
}
}
int main()
{
Josephus(5,4,1);
return 0;
}
看到这不知道您发现问题没,
问题时当我们进入Josephus函数时k的值会减一,然后再Josephus函数中每执行一行代码k的值还会减一
求解释。。。。