给定一个链表头指针A,请返回一个bool值,代表其是否为回文结构。链表长度小于等于900。
#include<stdio.h>
#include<stdlib.h>
typedef struct Dulnode
{
int data;
struct Dulnode *prior;
struct Dulnode *next;
}Dulnode,*Dulinklist;
Dulinklist L;
int n;
int flag;
void creat(Dulinklist &L)
{ int i;
char c;
Dulinklist p,r;
p=r=(Dulinklist)malloc(sizeof(Dulnode));
scanf("%d",&p->data);
c=getchar();
L=p;
for(i=1;c!='\n';i++)
{
p=(Dulinklist)malloc(sizeof(Dulnode));
scanf("%d",&p->data);
c=getchar();
if(i==1)
{
p->prior=L;
p->next=L;
L->next=p;
L->prior=p;
}
else
{
p->prior=r;
p->next=L;
r->next=p;
L->next=p;
}
n=i;
}
}
int main()
{
int i;
flag=1;
Dulinklist pt,pf;
L=(Dulinklist)malloc(sizeof(Dulnode));
L->prior->next=L->next->prior=L;
creat(L);
pt=L;
pf=L->next;
while(pt->next!=L)
pt=pt->next;
for(i=0;i<n/2;i++)
{if(pf->data!=pt->data)
{
flag=0;
break;
}
pf=pf->next;
pt=pt->prior;
}
if(flag==1) printf("true");
else printf("false");
return 0;
}
能把你测试数据贴出来看看么
L=(Dulinklist)malloc(sizeof(Dulnode));
L->prior->next=L->next->prior=L;
这里L才刚分配空间,那么 L->prior和L->next都是空的啊,你怎么就操作L->prior->next了呢?
改成L->prior = L->next = NULL;
#include<stdio.h>
#include<stdlib.h>
typedef struct Dulnode
{
int data;
struct Dulnode *prior;
struct Dulnode *next;
}Dulnode,*Dulinklist;
Dulinklist L;
int n;
int flag;
void creat(Dulinklist &L)
{ int i;
char c;
Dulinklist p,r;
p=r=(Dulinklist)malloc(sizeof(Dulnode));
scanf("%d",&p->data);
c=getchar();
L=p;
for(i=1;c!='\n';i++)
{
p=(Dulinklist)malloc(sizeof(Dulnode));
scanf("%d",&p->data);
c=getchar();
p->prior=r;
p->next=NULL;
r->next=p;
r = p;
n=i+1;
}
}
int main()
{
int i;
flag=1;
Dulinklist pt,pf;
L=(Dulinklist)malloc(sizeof(Dulnode));
L->prior=L->next=NULL;
creat(L);
pt=L;
pf=L;
while(pt->next!=NULL)
{
pt=pt->next;
}
for(i=0;i<n/2;i++)
{
if(pf->data!=pt->data)
{
flag=0;
break;
}
pf=pf->next;
pt=pt->prior;
}
if(flag==1) printf("true");
else printf("false");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!