预定程序员 2023-01-28 21:00 采纳率: 68.3%
浏览 33
已结题

调用equal函数后,涉及到equal函数的语句不运行

问题:建表输出正常,但是调用equal函数后不输出不运行,是哪里写的不对吗?
题目:判断循环双链表L是否对称

#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct DLnode
{
    int data;
    struct DLnode *next;
    struct DLnode *prior;
}DLinkNode;
void InitList(DLinkNode *&L)
{
    L=(DLinkNode *)malloc(sizeof(DLinkNode));
    L->prior=L->next=NULL;
}
void CreatList(DLinkNode *&L,int a[],int n)
{
    DLinkNode *p,*r;
    L=(DLinkNode *)malloc(sizeof(DLinkNode));
    r=L;
    for(int i=0;i<n;i++)
    {
        p=(DLinkNode *)malloc(sizeof(DLinkNode));
        p->data=a[i];
        r->next=p;
        p->prior=r;
        r=p;
    }
    r->next=NULL;
}
void DispList(DLinkNode *&L)
{
    DLinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
bool equal(DLinkNode *L)
{
    bool same=true;
    DLinkNode *p=L->next,*q=L->prior;
    while(same)
    {
        if(q->data!=p->data)
          same=false;
        else
        {
            if(p==q||p->next==q)   break;
            p=p->next;
            q=q->prior;
        }
    }
    return same;
}
int main()
{
    DLinkNode *L;
    int a[7];
    InitList(L);
    printf("请输入:");
    for(int i=0;i<7;i++)
    {
        scanf("%d",&a[i]);
    }
    CreatList(L,a,7);
    printf("请输出:");
    DispList(L);
    equal(L);
    printf("链表是%s的",(equal(L))?"对称":"不对称");
}

img

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-01-29 00:36
    关注

    改动处见注释,供参考:

    //题目:判断循环双链表L是否对称
    #include<stdio.h>
    #include<malloc.h>
    typedef int ElemType;
    typedef struct DLnode
    {
        int data;
        struct DLnode *next;
        struct DLnode *prior;
    }DLinkNode;
    void InitList(DLinkNode *&L)
    {
        L=(DLinkNode *)malloc(sizeof(DLinkNode));
        L->prior=L->next=L;  //L->prior=L->next=NULL; 修改
    }
    void CreatList(DLinkNode *&L,int a[],int n)
    {
        DLinkNode *p,*r;
        //L=(DLinkNode *)malloc(sizeof(DLinkNode));  修改 这句多余
        r=L;
        for(int i=0;i<n;i++)
        {
            p=(DLinkNode *)malloc(sizeof(DLinkNode));
            p->data=a[i];
            p->next=L;     //修改
            r->next=p;
            p->prior=r;
            L->prior=p;    //修改
            r=p;
        }
           //r->next=NULL;  修改
    }
    void DispList(DLinkNode *&L)
    {
        DLinkNode *p=L->next;
        while(p != L)   //while(p!=NULL)修改
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("\n");    //修改
    }
    bool equal(DLinkNode *L)
    {
        bool same=true;
        DLinkNode *p=L->next,*q=L->prior;
        while (p != L && q != L)
        {
            if (p->data == q->data)
            {
                p=p->next;
                q=q->prior;
            }
            else
                break;
        }
        same=(p==L&&q==L) ? true : false;
        //while(same)      //修改
        //{
        //    if(q->data!=p->data)
        //      same=false;
        //    else
        //    {
        //        if(p==q||p->next==q)   break;
        //        p=p->next;
        //        q=q->prior;
        //    }
        //}
        return same;
    }
    int main()
    {
        DLinkNode *L;
        int a[7];
        InitList(L);
        printf("请输入:");
        for(int i=0;i<7;i++)
        {
            scanf("%d",&a[i]);
        }
        CreatList(L,a,7);
        printf("请输出:");
        DispList(L);
        //equal(L);  //修改
        printf("链表是%s的",(equal(L))?"对称":"不对称");
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加