exist函数里
执行for循环,执行到链表末尾的时候,curt1=curt1->next 之后应该已经为空了,为什么还会进入这个for循环
然后进行循环里第一个if比较的时候就报错了,,,,感觉是个挺脑残的问题,无奈我链表用的不熟练,完全不知道怎么解决
求指点!thx
#include<stdio.h>
#include<windows.h>
#define MAX 8
int temp[MAX];
int allcount=0;
typedef struct result{
int num[MAX];
struct result* next;
}*rst;
rst head=NULL;
rst last;
rst curt;
void print()
{
int count;
for(curt=head;curt!=NULL;curt=curt->next)
{
for(count=0;count<MAX;count++)
{
printf("%d",curt->num[count]);
}
printf("\n");
}
}
int exist()
{
rst curt1;
int count1;
int exist=1;
if(head==NULL)
{
return 0;
}
for(curt1=head;curt1!=NULL;curt1=curt1->next)
{
for(count1=0;count1<MAX;count1++)
{
if(curt1->num[count1]!=temp[count1])
{
exist=0;
break;
}
}
for(count1=0;count1<MAX;count1++)
{
if(curt1->num[count1]!=temp[MAX-1-count1])
{
exist=0;
break;
}
}
for(count1=0;count1<MAX;count1++)
{
if(curt1->num[count1]!=MAX-1-temp[count1])
{
exist=0;
break;
}
}
for(count1=0;count1<MAX;count1++)
{
if(curt1->num[count1]!=MAX-1-temp[MAX-1-count1])
{
exist=0;
break;
}
}
if(exist==1)
{
return 1;
}
exist=1;
}
return 0;
}
void work(int current)
{
int x,count;
for(x=0;x<MAX;x++)
{
if(temp[x]==-1)//x暂时有用
{
temp[x]=current;
if(current==MAX-1)
{
allcount++;//test
if(exist()==1)
{
if(head==NULL)
{
head=(rst)malloc(sizeof(struct result));
curt=head;
for(count=0;count<MAX;count++)
{
head->num[count]=temp[count];
}
}
else
{
last=curt;
curt=(rst)malloc(sizeof(struct result));
last->next=curt;
for(count=0;count<MAX;count++)
{
curt->num[count]=temp[count];
}
}
}
}
else
{
work(current+1);
}
temp[x]=-1;
}
}
}
int main(void)
{
int count;
for(count=0;count<MAX;count++)
{
temp[count]=-1;
}
work(0);
printf("%d",allcount);
print();
}