猴子选大王 数据结构链表 各位大神帮我看看哪里有问题吧 最好能写一下注释 谢谢啦!
#include<stdio.h>#include<stdlib.h>typedefintdatatype;typedefstructnode{intdata;struc...
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
int data;
struct node *next;
}monkeylist;
monkeylist *creatlist(monkeylist*L,int n);
int output(monkeylist *head);
void Delete(monkeylist *p);
monkeylist *Kinglist(monkeylist *L,int y,int z);
int main()
{
monkeylist *head = (monkeylist*)malloc(sizeof(monkeylist));
int x,y,z;
printf("请输入有多少只猴子:");
scanf("%d",&x);
creatlist(head,x);
printf("请输入从第几只猴子开始报数,报到什么数字出局:");
scanf("%d%d",&y,&z);
Kinglist(head,y,z);
output(head);
}
monkeylist *creatlist(monkeylist*L,int n)
{
monkeylist *p,*q;
int i;
q = L;
for(i=1;i<=n;i++)
{
p=(monkeylist*)malloc(sizeof(monkeylist));
p->data=i;
q->next=p;
q=p;
}
q->next = L;
}
void Delete(monkeylist *p)
{
monkeylist *r;
r=p->next;
p->next=r->next;
free(r);
}
int output(monkeylist *head)
{
monkeylist *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
return 1;
}
monkeylist *Kinglist(monkeylist *L,int y,int z)
{
monkeylist *p = L,*q;
int i=y=0;
while(1)
{
i++;
if(i==z)
{
i=0;
Delete(p);
}
p = p->next;
if(p->next==p)
return p;
}
} 展开
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
int data;
struct node *next;
}monkeylist;
monkeylist *creatlist(monkeylist*L,int n);
int output(monkeylist *head);
void Delete(monkeylist *p);
monkeylist *Kinglist(monkeylist *L,int y,int z);
int main()
{
monkeylist *head = (monkeylist*)malloc(sizeof(monkeylist));
int x,y,z;
printf("请输入有多少只猴子:");
scanf("%d",&x);
creatlist(head,x);
printf("请输入从第几只猴子开始报数,报到什么数字出局:");
scanf("%d%d",&y,&z);
Kinglist(head,y,z);
output(head);
}
monkeylist *creatlist(monkeylist*L,int n)
{
monkeylist *p,*q;
int i;
q = L;
for(i=1;i<=n;i++)
{
p=(monkeylist*)malloc(sizeof(monkeylist));
p->data=i;
q->next=p;
q=p;
}
q->next = L;
}
void Delete(monkeylist *p)
{
monkeylist *r;
r=p->next;
p->next=r->next;
free(r);
}
int output(monkeylist *head)
{
monkeylist *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
return 1;
}
monkeylist *Kinglist(monkeylist *L,int y,int z)
{
monkeylist *p = L,*q;
int i=y=0;
while(1)
{
i++;
if(i==z)
{
i=0;
Delete(p);
}
p = p->next;
if(p->next==p)
return p;
}
} 展开
1个回答
展开全部
void Delete(monkeylist *p);写的不对 你要删除一个猴子当前结点必须记住当前结点的前一个结点,然后让这个前一个结点指向当前结点的后一个结点。你不用特意写delete函数。
具体可以这么写:
monkeylist *Kinglist(monkeylist *L,int y,int z)
{
monkeylist *p = L,*q;
int i=y=0;
while(1)
{
i++;
if(i== z-1) //要删除的当前结点的前一个结点位置
{
q=p; //用一个临时值记住
}
if(i==z) //删除结点
{
i=0;
q->next=p->next;
free(p);
p=q->next;
}
p = p->next;
if(p->next==p)
return p;
}
}
不过感觉你这个y的值传进去没用。。。你直接初始化为0了
具体可以这么写:
monkeylist *Kinglist(monkeylist *L,int y,int z)
{
monkeylist *p = L,*q;
int i=y=0;
while(1)
{
i++;
if(i== z-1) //要删除的当前结点的前一个结点位置
{
q=p; //用一个临时值记住
}
if(i==z) //删除结点
{
i=0;
q->next=p->next;
free(p);
p=q->next;
}
p = p->next;
if(p->next==p)
return p;
}
}
不过感觉你这个y的值传进去没用。。。你直接初始化为0了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询