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

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

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

 #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 qq_36631947 3年前

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

    点赞 1 评论 复制链接分享
  • lixiaogang_theanswer 君子黎 3年前
     inputa()与inputb()函数都需要改为二级指针传地址;如:
     void inputa(LinkList *d,int t);
     void inputb(LinkList *d,int t);
     然后函数内部指针修改下,便可。
    
    

    若有帮助,还望采纳!!!谢谢。。。。

    点赞 2 评论 复制链接分享

为你推荐