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

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

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

 #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条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大