xqcjames 2012年04月24日
约瑟夫环循环链表的实现出现一个很奇葩的现象,求围观,求解释
代码如下,

#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的值还会减一
求解释。。。。
...全文
50 点赞 收藏 6
写回复
6 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告