1.代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode {
int coefficient; // 系数
int exponent; // 指数
struct LinkNode* next;
} *LinkList, *NodePtr;
LinkList initLinkList() {
LinkList tempHeader = (LinkList)malloc(sizeof(struct LinkNode));
tempHeader->coefficient = 0;
tempHeader->exponent = 0;
tempHeader->next = NULL;
return tempHeader;
}
void printList(LinkList paraHeader) {
NodePtr p = paraHeader->next;
while (p != NULL) {
printf("%d * x^%d + ", p->coefficient, p->exponent);
p = p->next;
}
printf("\n");
}
void printNode(NodePtr paraPtr, char paraChar) {
if (paraPtr == NULL) {
printf("NULL\n");
} else {
printf("The element of %c is (%d * x^%d)\n", paraChar, paraPtr->coefficient, paraPtr->exponent);
}
}
void appendElement(LinkList paraHeader, int paraCoefficient, int paraExponent) {
NodePtr p, q;
q = (NodePtr)malloc(sizeof(struct LinkNode));
q->coefficient = paraCoefficient;
q->exponent = paraExponent;
q->next = NULL;
p = paraHeader;
while (p->next != NULL) {
p = p->next;
}
p->next = q;
}
void add(NodePtr paraList1, NodePtr paraList2) {
NodePtr p, q, r, s;
p = paraList1->next;
printNode(p, 'p');
q = paraList2->next;
printNode(q, 'q');
r = paraList1;
printNode(r, 'r');
free(paraList2);
while ((p != NULL) && (q != NULL)) {
if (p->exponent < q->exponent) {
printf("case1\n");
r->next = p;
r = p;
printNode(r, 'r');
p = p->next;
printNode(p, 'p');
} else if (p->exponent > q->exponent) {
printf("case2\n");
r->next = q;
r = q;
printNode(r, 'r');
q = q->next;
printNode(q, 'q');
} else {
printf("case3\n");
p->coefficient += q->coefficient;
if (p->coefficient == 0) {
printf("case3.1\n");
s = p;
p = p->next;
printNode(p, 'p');
free(s);
} else {
printf("case3.2\n");
r = p;
printNode(r, 'r');
p = p->next;
printNode(p, 'p');
}
s = q;
q = q->next;
free(s);
}
}
printf("End of while\n");
if (p == NULL) {
r->next = q;
} else {
r->next = p;
}
printf("Addition ends\n");
}
int main() {
LinkList list1 = initLinkList();
LinkList list2 = initLinkList();
appendElement(list1, 3, 2);
appendElement(list1, 5, 1);
appendElement(list2, 2, 2);
appendElement(list2, 4, 0);
add(list1, list2);
printList(list1);
return 0;
}
2.运行结果: