#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct node{
    int xi;//存放系数
    int zi;//存放指数
    struct node *next;
}Node;
Node *Creat()                        
{
    Node *head,*p,*pre;
    int fg,tag;
    head=(Node *)malloc(sizeof(Node));
    head->next=NULL;
    pre=head;
    printf("请按照指数从小到大输入多项式并以0 0结束:\n");
    scanf("%d%d",&fg,&tag);
    while(fg)
    {
        p=(Node *)malloc(sizeof(Node));
        p->xi=fg;
        p->zi=tag;
        p->next=pre->next;
        pre->next=p;
        pre=p;
        scanf("%d%d",&fg,&tag);
    }
    if(fg==0&&tag==0)
        printf("\n输入结束:\n");
    return head;
}
void Read(Node *head)                //读取链表中的数据
{
    Node *p=head->next;
    while(p)
    {
        printf("%dX~%d->",p->xi,p->zi);
        p=p->next;
    }
    printf("NULL\n");
}
Node *Add(Node *head1,Node *head2)
{
    Node *p,*head,*p1,*p2;int sum;
    head=(Node *)malloc(sizeof(Node));
    p=head;
    p1=head1->next;
    p2=head2->next;
    while(p1&&p2)
    {
        if(p1->zi<p2->zi)
        {
            p->next=p1;
            p=p1;
            p1=p1->next;
        }
        if(p1->zi>p2->zi)
        {
            p->next=p2;
            p=p2;
            p2=p2->next;
        }
        if(p1->zi==p2->zi)
        {
            sum=p1->xi+p2->xi;
            if(sum)
            {
                p1->xi=sum;
                p->next=p1;
                p=p1;
                p1=p1->next;
                p2=p2->next;
            }
            else
            {
                p1=p1->next;
                p2=p2->next;
            }
        }
    }
    if(p1)                    //将1中剩余结点接到和链表中
    {
    do{
        p->next=p1;
        p=p1;
        p1=p1->next;
    }while(p1);
    }
    if(p2)                    //将2中剩余结点接到和链表中
    {
    do{
        p->next=p2;
        p=p2;
        p2=p2->next;
    }while(p2);
    }
    return head;
}
void main()
{
    Node *head,*p1,*p2;
    p1=Creat();
    Read(p1);
    p2=Creat();
    Read(p2);
    head=Add(p1,p2);
    printf("相加后为:\n");
    Read(head);
    getch();
}
运行时候为什么输入的数据比较少时候正确..输入多了之后就会出错!
谁帮我看下呀,!谢谢!
[此贴子已经被作者于2007-10-18 18:53:36编辑过]



											
	    

	