6-3 Add Two Polynomials(20 分)

Write a function to add two polynomials. Do not destroy the input. Use a linked list implementation with a dummy head node. Note: The zero polynomial is represented by an empty list with only the dummy head node.

Format of functions:

Polynomial Add( Polynomial a, Polynomial b );

where Polynomial is defined as the following:

typedef struct Node *PtrToNode;
struct Node {
    int Coefficient;
    int Exponent;
    PtrToNode Next;
};
typedef PtrToNode Polynomial;
/* Nodes are sorted in decreasing order of exponents.*/

The function Add is supposed to return a polynomial which is the sum of a and b.

Sample program of judge:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node  {
    int Coefficient;
    int Exponent;
    PtrToNode Next;
};
typedef PtrToNode Polynomial;

Polynomial Read(); /* details omitted */
void Print( Polynomial p ); /* details omitted */
Polynomial Add( Polynomial a, Polynomial b );

int main()
{
    Polynomial a, b, s;
    a = Read();
    b = Read();
    s = Add(a, b);
    Print(s);
    return 0;
}

/* Your function will be put here */

Sample Input:

4
3 4 -5 2 6 1 -2 0
3
5 20 -7 4 3 1

Sample Output:

5 20 -4 4 -5 2 9 1 -2 0

代码:

Polynomial Add( Polynomial a, Polynomial b )
{
    Polynomial head = (PtrToNode)malloc(sizeof(struct Node));
    head -> Next = NULL;
    Polynomial q = head;
    while(a || b)
    {
        Polynomial p =(PtrToNode)malloc(sizeof(struct Node));
        p -> Next = NULL;
        if(a == NULL || b&&a -> Exponent < b -> Exponent)///防止段错误
        {
            p -> Exponent = b -> Exponent;
            p -> Coefficient = b -> Coefficient;
            q -> Next = p;
            q = p;
            b = b -> Next;
        }
        else if(b == NULL ||  a&&a -> Exponent > b -> Exponent)
        {
            p -> Exponent = a -> Exponent;
            p -> Coefficient = a -> Coefficient;
            q -> Next = p;
            q = p;
            a = a -> Next;
        }
        else
        {
            if(a -> Coefficient + b -> Coefficient)
            {
                p -> Exponent = a -> Exponent;
                p -> Coefficient = a -> Coefficient + b -> Coefficient;
                q -> Next = p;
                q = p;
            }
            a = a -> Next;
            b = b -> Next;
        }
    }
    return head;
}
原文地址:https://www.cnblogs.com/8023spz/p/7704174.html