猴子选大王 数据结构链表 各位大神帮我看看哪里有问题吧 最好能写一下注释 谢谢啦!

#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;
}
}
展开
 我来答
饱满且果敢的国宝4653
2012-03-26 · TA获得超过6万个赞
知道大有可为答主
回答量:3.9万
采纳率:0%
帮助的人:5270万
展开全部
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了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式