m0_67861382 2022-03-22 15:17 采纳率: 100%
浏览 32
已结题

可以帮我看看嘛,为什么啥也不输出啊

给定一个链表头指针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;
}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-22 15:26
    关注

    能把你测试数据贴出来看看么
    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?