约瑟夫环循环链表的实现出现一个很奇葩的现象,求围观,求解释

xqcjames 2012-04-24 06:27:41
代码如下,

#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的值还会减一
求解释。。。。
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqcwade 2012-07-22
  • 打赏
  • 举报
回复
Debug下不能有运算表达式
xqcwade 2012-07-22
  • 打赏
  • 举报
回复
Debug中不能有++i
xqcjames 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我前些天复习华为机试题时,碰到了个约瑟夫问题,写了个代码,在博客中,你可以参考参考
http://blog.csdn.net/kuzuozhou/article/details/7459105
[/Quote]

看了一下,大同小异,我的问题已经解决。可以有时间复杂度更好的算法吗
xqcjames 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

问题时当我们进入Josephus函数时k的值会减一,然后再Josephus函数中每执行一行代码k的值还会减一??我怎么没有发现??请教在什么地方??

while (k--)
{
pre = curr;
curr = curr->next;
}
这代码的意思是:从第k个节点开始计数。
[/Quote]

你是用的vc6.0吗??
pengfoo 2012-04-24
  • 打赏
  • 举报
回复
我前些天复习华为机试题时,碰到了个约瑟夫问题,写了个代码,在博客中,你可以参考参考
http://blog.csdn.net/kuzuozhou/article/details/7459105
W170532934 2012-04-24
  • 打赏
  • 举报
回复
问题时当我们进入Josephus函数时k的值会减一,然后再Josephus函数中每执行一行代码k的值还会减一??我怎么没有发现??请教在什么地方??

while (k--)
{
pre = curr;
curr = curr->next;
}
这代码的意思是:从第k个节点开始计数。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧