编程----约瑟夫环.请各位仁兄帮忙修改一下!

来源:百度知道 编辑:UC知道 时间:2024/05/15 01:33:25
编了一个程序,可是运行的时候,只有第一次能正确输出,其余的输出序号都是一,帮帮忙,找一下错误。感激涕零!

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode;

void main()
{
struct LNode *head;//head为头指针
struct LNode *p1,*p2;
int i,j,m,n;
p1=p2=(struct LNode*)malloc(sizeof(LNode));
head=NULL;
printf("输入人数:\n");//输入人数
scanf("%d",&n);
for(i=1;i<=n;i++)
{
head=p1;//指向第一个结点
p2->next=p1;
p2=p1;
p1=(struct LNode*)malloc(sizeof(LNode));
printf("输入密码:\n");//输入密码
scanf("%d",&p1->data);
}p2->next=head;//首尾相接

printf("输入上限:\n");
scanf("%d",&m);//输入上限
for(i=1;i<=n;i++)
{
for(j=1;j<m;j++)//运行至m-1
{ p1=head;
p1=p1->next;
}
if(m<=n) printf("出列顺序

最大的两个问题就是把
head = p1
和p1 = head
都写到了循环体里面,这样的话,每插入一个节点head指针就会被重置一次,结果显然会有问题。
为了简化代码,把每个人的序号也放到了struct里面。下面是我的代码,加了注释,你看看吧:)还有什么问题给我发消息。

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

typedef struct LNode{
int data; // 密码
int order; // 序号
struct LNode *next;
}LNode;

void main()
{
struct LNode *head;//head为头指针
struct LNode *p1,*p2;

int i,j,m,n;

printf("输入人数:\n");//输入人数
scanf("%d",&n);

//为了简化代码,建表的时候使用一个空的Node作为表头,建好以后删除。
p1=(struct LNode*)malloc(sizeof(LNode));
head = p1;
for(i=1;i<=n;i++)
{
p1->next =(struct LNode*)malloc(sizeof(LNode));
printf("输入密码:\n");//输入密码
scanf("%d",&p1->next->data);
p1->next->order = i;
p1 = p1->next;
}

p1->next = head->next; // 首尾相连,此时p1指向链表的尾