回 帖 发 新 帖 刷新版面

主题:新手求帮助

大一刚刚学。。。关于用链表的多项式合并。。帮我在原来基础上改下吧。。因为不懂。。请不要改的太高深
#define NULL 0

typedef struct node
{int c;
 int e;
 struct node *next;
    }polynode;
polynode *createpoly(int n)
{
    int i;
    polynode *l;
    polynode *p;
    l=(polynode*)malloc(sizeof(polynode));
    l->next=NULL;
    for(i=n;i>0;i--)
    {
        p=(polynode*)malloc(sizeof(polynode));
        printf("please input %d xishu:",i);
        scanf("%d",&p->c);
        printf("please input %d zhishu:",i);
        scanf("%d",&p->e);
        p->next=l->next;
        l->next=p;
    }
    return(l);
}
void printpoly(polynode *h,polynode *l)
{
 int i=1;

 polynode *p,*q,*n,*m;
 n=(polynode*)malloc(sizeof(polynode));
 m=n;
  printf("\n");
while(p&&q)
  {
    if(p->next->e>q->next->e)
    {
     n->next=q;
     q=q->next->next;
    }
    if(q->next->e>p->next->e)
    {
     n->next=p;
     p=p->next->next;
    }
    if(q->next->e=p->next->e)
    {
     p->next->c+=q->next->c;
     n->next=p;
     p=p->next->next;
     q=q->next->next;
    }
    }
  if(q=NULL)
    n->next=p->next;
  else
    n->next=q->next;
   while(m!=NULL)
 {   

     printf("%d xishu:%d\n",i,m->c);
     printf("%d zhishu:%d\n",i,m->e);
    m=m->next;     i++;
 }
}
main()
{
 int n,m;
 polynode *h,*l;
 printf("please input n:");
 scanf("%d",&n);
 h=createpoly(n);
 printf("please input m:");
 scanf("%d",&m);
 l=createpoly(m);
 printpoly(h,l);
}

回复列表 (共1个回复)

沙发

注意用链表时容易出现内存错误,关键是控制循环、、这段代码错的关键是while(p&q)中的部分,首先p = h; q = l;lz没有复制就参与运算了,还有就是q->next->nex很容易会出现NULL->next的错误(这不成立,仅为说明),还有算法问题,三个if是独立的,前面if比较后肯定造成p或q指针后移,在进行取值p->c,q->c的比较就不晓得在比较什么了。。也容易出现内存错误、、

一句话,注意控制语句要严格。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册