voidprintList(LinkList paraHeader){
NodePtr p = paraHeader->next;while(p !=NULL){//规范打印 方便观察printf("%d * 10^%d + ", p->coefficient, p->exponent);
p = p->next;}printf("\r\n");}
打印节点
voidprintNode(NodePtr paraPtr,char paraChar){if(paraPtr ==NULL){printf("NULL\r\n");}else{printf("The element of %c is (%d * 10^%d)\r\n", paraChar, paraPtr->coefficient, paraPtr->exponent);}}
//增添元素
voidappendElement(LinkList paraHeader,int paraCoefficient,int paraExponent){
NodePtr p, q;//申请//creat new node
q =(NodePtr)malloc(sizeof(structLinkNode));
q->coefficient = paraCoefficient;
q->exponent = paraExponent;
q->next =NULL;//申请临时变量
p = paraHeader;while(p->next !=NULL){
p = p->next;}
p->next = q;}
链表相加 (重点所在)
voidadd(NodePtr paraList1, NodePtr paraList2){
NodePtr p, q, r, s;// s指针用来删除的//r指针用来连接完善paraList的
p = paraList1->next;printNode(p,'p');
q = paraList2->next;printNode(q,'q');
r = paraList1;printNode(r,'r');free(paraList2);// situationwhile((p !=NULL)&&(q !=NULL)){//二者指数如果不相等if(p->exponent < q->exponent){printf("case 1\r\n");
r->next = p;
r = p;printNode(r,'r');
p = p->next;printNode(p,'p');//r连接p p往后移 q不动 知道遇到p的exponent 》= q的exponent 。}// p 》 qelseif((p->exponent > q->exponent)){printf("case 2\r\n");
r->next = q;
r = q;//把p串起来printNode(r,'r');//q后移
q = q->next;printNode(q,'q');}//若二者指数相等else{printf("case 3\r\n");
p->coefficient = p->coefficient + q->coefficient;//合二为一给p吧printf("The coefficient is: %d.\r\n", p->coefficient);// 如果系数和为0 自然可以删除这一节点了if(p->coefficient ==0){printf("case 3.1\r\n");
s = p;
p = p->next;printNode(p,'p');// free(s);}else//若系数不为0 就p赋值给r p指针往后移{printf("case 3.2\r\n");
r = p;printNode(r,'r');
p = p->next;printNode(p,'p');}
s = q;//q两种情况都要往后面移
q = q->next;free(s);}printf("p = %ld, q = %ld \r\n", p, q);}printf("End of while.\r\n");if(p ==NULL){
r->next = q;}else{
r->next = p;}printf("Addition ends.\r\n");}
图例
测试用例
voidadditionTest1(){
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,8);printList(tempList2);add(tempList1, tempList2);printf("The result is: ");printList(tempList1);printf("\r\n");}voidadditionTest2(){// Step 1. Initialize the first polynomial.
LinkList tempList1 =initLinkList();appendElement(tempList1,7,0);appendElement(tempList1,3,1);appendElement(tempList1,9,8);appendElement(tempList1,5,17);printList(tempList1);// Step 2. Initialize the second polynomial.
LinkList tempList2 =initLinkList();appendElement(tempList2,8,1);appendElement(tempList2,22,7);appendElement(tempList2,-9,10);printList(tempList2);// Step 3. Add them to the first.add(tempList1, tempList2);printf("The result is: ");printList(tempList1);printf("\r\n");}intmain(){additionTest1();additionTest2();printf("Finish.\r\n");return0;}