69,369
社区成员
发帖
与我相关
我的任务
分享
/*
原程序的主要错误是:
1。函数Rabbit中p->next=(p+current*sizeof(linklist))->next;用于结构数组,但不适合本程序的链表结构;
2。printf("此洞是第%d号洞",p->data); 将总是输出1而不是洞号。
现修改如下:
*/
#include <stdio.h>
#include <stdlib.h>
#define LISTSIZE 10
typedef struct linklist
{
int data;
struct linklist *next;
int number;
} linklist;
linklist *initlist(void)
{
int i;
linklist *head,*s;
head = NULL;
for(i=0;i <LISTSIZE;i++)
{
s=(linklist *)malloc(sizeof(linklist));
s->data=1;
s->next=head;
s->number = LISTSIZE-i;
head = s;
}
return head;
}
int Rabbit(linklist *L)
{
int i=1;
linklist *p;
p=L;
//(*p).data=0;
for (i = 1; i < 1000; i++) //while((p->next!=NULL) && i <=1000)
{
int j;
p->data=0;
for (j = 0; j < (i+1); j++)
{
if (p->next) p = p->next;
else p = L;
}
}
printf("\n兔子可能藏在如下洞中:\n");
p=L;
while(p) //(p->next)!=NULL
{
if(p->data==1)
{
printf("此洞是第%d号洞\n",p->number);//printf("此洞是第%d号洞\n",p->data);
}
p=p->next;
}
return 1;
}
void main()
{
//linklist a;
linklist *L; //=&a;
L=initlist(); //L=initlist(L);
Rabbit(L);
}