问题描述
- 初学链表,解决约瑟夫环问题。
-
在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的部分求解释
解决方案
现在用链表解决约瑟夫环问题,链表与数组的区别在于,链表的出列是删除结点,而数组并没有真正删除元素,只是标记为不存在。
上代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
typedef struct node V_NODE;
struct node{
int id;
struct node *n......
答案就在这里:链表解决约瑟夫环问题
解决方案三:
http://blog.csdn.net/newnewman80/article/details/5989449 先看看别人是怎么写的,再体会自己哪里疏忽了
解决方案四:
如果没有return,那么返回值是不确定的,看当时寄存器的值是什么了
楼主的main函数里也没有return,如果是在别的函数里这样写的话一般来说是过不了编译的
解决方案五:
debug会吗