#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
int zhuti(Linklist A)
{
typedef struct Node *p,*q;
int i;
printf("输入报数上限\n");
scanf("%d",&m);
LinkList B;
*B=(typedef struct Node*)malloc(sizeof(Node));
B->next=NULL;
p=A;
q=B;
while(p!=p->next)
{
for(i=1;i!=m;i++)
p=p->next;
q->next=p;
q=q->next;
p->next=p->next->next;
}
q->next=p;
q=q->next;
q->next=NULL;
return (B);
}
LinkList shuchu(LinkList B)
{
while(B!=NULL)
{
printf("%d,",B->date);
B=B->next;
}
}
void jianli(LinkList A)
{
typedef struct Node *s;
int i,n;
printf("输入人数\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=(Node*)malloc(sizeof(Node));
s->date=i;
s->next=A->next;
A->next=s;
}
}
int main()
{
LinkList B;
LinkList A;
A=(LinkList)malloc(sizeof(Node));
A->next=NULL;
jianli(LinkList A);
B=zhuti(Linklist A);
shuchu(LinkList B);
return 0;
}
天蓬老师2017-04-17 14:41:51
这代码问题好多,看得出来是初学者,结构体应用语法错误都有好多,这里贴一个用这份代码改出来的正确答案。
#include<stdio.h>
#include<malloc.h>
typedef struct LNode {
int data;
struct LNode *next;
}LNode;
LNode* MainPart(LNode* A)
{
LNode *p=A, *q;
int i, m;
printf("数到几的人出局?: ");
scanf("%d", &m);
while(p!=p->next)
{
for(i=1; i!=m; i++)
p=p->next;
q=p->next;
p->next=q->next;
printf("No.%d is out!!\n", q->data);
free(q);
}
return (p);
}
//打印链表
void Output(LNode* B)
{
printf("%d is winner!\n", B->data);
B = B-> next;
}
//头插法建立链表,长度为n
void Create(LNode* A)
{
LNode *tmp;
int i, n;
printf("输入总人数: ");
scanf("%d",&n);
A->data=0;
for(i=n; i!=0; i--)
{
LNode *s;
s = (LNode*)malloc(sizeof(LNode));
s -> data = i;
s -> next = A -> next;
A -> next = s;
if(i==n)
tmp=s;
}
tmp->next=A->next;
}
int main()
{
LNode *A, *B;
A = (LNode*)malloc(sizeof(LNode));
A -> next = NULL;
Create(A);
B=MainPart(A);
Output(B);
return 0;
}