那边的薯片半价阿 2018-11-06 03:04 采纳率: 83.3%
浏览 2269
已采纳

单链表实现一元多项式相加的问题

通过编译但是输不出结果,不知道哪里出了问题,求救

 #include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int num;
    int expn;
    struct LNode *next;
}LNode,*LinkList;
//h,d是两个链表的头指针
void createlista(LinkList *h,int n)
{
    int i;
    *h=(LinkList)malloc(sizeof(LNode));
    LinkList p = *h;
    for(i=0;i<n+1;i++)
    {
        p->next=(LinkList)malloc(sizeof(LNode));
        p=p->next;
    }

}
void createlistb(LinkList *d,int t)
{
    int i;
    *d=(LinkList)malloc(sizeof(LNode));
    LinkList p = *d;
    for(i=0;i<t+1;i++)
    {
        p->next=(LinkList)malloc(sizeof(LNode));
        p=p->next;
    }

}
void inputa(LinkList h,int n)
{
    int i;
    LinkList p,q;
    p=h->next->next;
    q=h->next;
    printf("请输入a多项式的指数");
    for(i=0;i<n;i++)
    {
        scanf("%d",&p->expn);
        p=p->next;

    }
    printf("请输入a多项式的系数");
    for(i=0;i<n;i++)
    {
        scanf("%d",&q->num);
        q=q->next;
    }
}
void inputb(LinkList d,int t)
{
    int i;
    LinkList p,q;
    p=d->next->next;
    q=d->next;
    printf("请输入b多项式的指数");
    for(i=0;i<t;i++)
    {
        scanf("%d",&p->expn);
        p=p->next;
    }
    printf("请输入b多项式的系数");
    for(i=0;i<t;i++)
    {
        scanf("%d",&q->num);
        q=q->next;

    }
}
LinkList add(LinkList h,LinkList d)
{
    LinkList p,q,r,x,s;
    int sum;
    s=h;
    p=h->next->next;
    q=d->next->next;
    r=h->next;
    while(p!=NULL&&q!=NULL)
    {
        if(p->expn==q->expn)
        {
            sum=p->num+q->num;
            if(sum!=0)
            {
                p->num=sum;
                r->next=p;
                r=p;
                p=p->next;
                //r=p2;
                q=q->next;
                //free(r);
            }
            else
            {
                //r=p1;
                p=p->next;
                r->next=p;
                //free(r);
                //r=p2;
                q=q->next;
                //free(r);
            }
        }
        else if(p->expn<q->expn)
        {
            r->next=p;
            r=p;
            p=p->next;
        }
        else
        {
            x=(LinkList)malloc(sizeof(LNode));
            x->num=q->num;
            x->expn=q->expn;
            r->next=x;
            x->next=p;
            q=q->next;
            p=x->next;
        }
    }

    //r->next=p?p:q;
    while(p!=NULL)
    {
        p=p->next;
    }
    while(q!=NULL)
    {
        p->next=q;
        p=q;
        q=q->next;
    }
    return s;
    //free(p2);
}
void show(LinkList head)
{
    LinkList p;
    p=head->next->next;
    for(;p!=NULL;p=p->next)
    {
        printf("%dX^%d+",p->num,p->expn);
    }
}
int main()
{
    LinkList h,d,head;
    int n,t;
    printf("请输入第一个多项式的项数");
    scanf("%d",&n);
    printf("请输入第二个多项式的项数");
    scanf("%d",&t);
    createlista(&h,n);
    createlistb(&d,t);
    inputa(h,n);
    inputb(d,t);
    head=add(h,d);
    show(head);
    printf("Hello world!\n");
    return 0;
}

  • 写回答

2条回答 默认 最新

  • qq_36631947 2018-11-06 04:02
    关注

    add()函数中while循环p!=NULL以及q!=NULL出错,实际上p和q在取完链表输入的正确值后链表并没有指向NULL。
    可选解决方案:在createlista()与createlistb()函数最后添加一行 p->next = NULL;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题