2 u011382294 u011382294 于 2016.05.11 00:06 提问

初学链表,解决约瑟夫环问题。

在codebolcks里面运行能够正常出结果,但是不是return 0,return的数字和输入的n有关请问我的代码有问题吗?

#include
#include
struct child
{
int num;
struct child *pre;
struct child *next;
};

int main()
{
int n,k;
scanf("%d %d",&n,&k);
struct child *current,*prev,*home;
current = (struct child *) malloc(sizeof(struct child));
current->num=1;
prev=current;
home=current;
int i,roll=1;
for (i=1; i current = (struct child *) malloc(sizeof(struct child));
if (current == NULL) {
printf("wrong!");
}
current->num=1+i;
current->pre=prev;
prev->next=current;
prev=current;
}
prev->next=home;
home->pre=prev;
int num,mod;
while (roll<=n)
{
if (roll>1) {
putchar(' ');
}
num=roll+k-1;
mod=num%(n-roll+1);
while (mod>0)
{
home=home->next;
//printf("%p",home);
mod--;
}
printf("%d",home->num);
prev=home->pre;
prev->next=(home->next);
prev=home;
home=home->next;
free(prev);
roll++;
}
}
运行结果如图:return 6的部分求解释
图片说明

5个回答

CSDNXIAOS
CSDNXIAOS   2016.05.11 00:12

现在用链表解决约瑟夫环问题,链表与数组的区别在于,链表的出列是删除结点,而数组并没有真正删除元素,只是标记为不存在。
上代码:

#include<stdio.h>
#include<stdlib.h>

#define MAX 10
typedef struct node V_NODE;
struct node{
int id;
struct node *n......
答案就在这里:链表解决约瑟夫环问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

u011382294
u011382294 我补了张图,是去掉释放内存代码的运行结果。。还是有问题
一年多之前 回复
u011382294
u011382294   2016.05.11 00:19

这是不手动释放内存的运行结果,return部分还是有问题。。。

havedream_one
havedream_one   2016.05.11 08:05

http://blog.csdn.net/newnewman80/article/details/5989449 先看看别人是怎么写的,再体会自己哪里疏忽了

qq423399099
qq423399099   Ds   Rxr 2016.05.11 09:09

如果没有return,那么返回值是不确定的,看当时寄存器的值是什么了
楼主的main函数里也没有return,如果是在别的函数里这样写的话一般来说是过不了编译的

AgoniAngel
AgoniAngel   Rxr 2016.05.11 10:42

debug会吗

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!