核心加法
void add(NodePtr paraList1, NodePtr paraList2){
NodePtr p, q, r, s;
p = paraList1->next;
q = paraList2->next;
r = paraList1;
free(paraList2);
while ((p != NULL) && (q != NULL)) {
if (p->exponent < q->exponent) {
r->next = p;
r = p;
p = p->next;
} else if (p->exponent > q->exponent) {
r->next = q;
r = q;
q = q->next;
} else {
p->coefficient = p->coefficient + q->coefficient;
printf("The coefficient is: %dn", p->coefficient);
if (p->coefficient == 0) {
s = p;
p = p->next;
free(s);
} else {
r->next = p;
r = p;
p = p->next;
}
s = q;
q = q->next;
free(s);
}
printf("End of whilen");
}
if (p == NULL) {
r->next = q;
} else if (q == NULL) {
r->next = p;
}
printf("Addition ends.n");
}
总代码
#include#include 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 * 10^%d + ", p->coefficient, p->exponent); p = p->next; } printf("n"); } 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; q = paraList2->next; r = paraList1; free(paraList2); while ((p != NULL) && (q != NULL)) { if (p->exponent < q->exponent) { r->next = p; r = p; p = p->next; } else if (p->exponent > q->exponent) { r->next = q; r = q; q = q->next; } else { p->coefficient = p->coefficient + q->coefficient; printf("The coefficient is: %dn", p->coefficient); if (p->coefficient == 0) { s = p; p = p->next; free(s); } else { r->next = p; r = p; p = p->next; } s = q; q = q->next; free(s); } printf("End of whilen"); } if (p == NULL) { r->next = q; } else if (q == NULL) { r->next = p; } printf("Addition ends.n"); } void additionTest(){ LinkList tempList1 = initLinkList(); appendElement(tempList1, 7, 0); appendElement(tempList1, 3, 1); appendElement(tempList1, 9, 8); appendElement(tempList1, 5, 17); printList(tempList1); LinkList tempList2 = initLinkList(); appendElement(tempList2, 8, 1); appendElement(tempList2, 22, 7); appendElement(tempList2, 9, 10); printList(tempList2); add(tempList1, tempList2); printList(tempList1); } int main() { additionTest(); printf("Finish.n"); return 0; }
运行结果
(1)
(2)



