1,创建链表
typedef struct List
{
int data;
int exponent;
struct List*next;
}*ListPtr,*NodePtr;
2,初始化
ListPtr initLinkList()
{
ListPtr Header=(ListPtr)malloc(sizeof(ListPtr));
Header->data=0;
Header->exponent=0;
Header->next=NULL;
return Header;
}
3,打印链表函数
void printList(ListPtr Header){
NodePtr p = Header->next;
while (p != NULL) {
printf("%d * 10^%d + ", p->data, p->exponent);
p = p->next;
}
printf("\r\n");
}
4,连接链表
void NewList(ListPtr Header, int paraData, int paraExponent){
NodePtr p, q;
q = (NodePtr)malloc(sizeof(ListPtr));
q->data = paraData;
q->exponent = paraExponent;
q->next = NULL;
p = Header;
while (p->next != NULL) {
p = p->next;
}
p->next = q;
}
5,多项式求和
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->data = p->data + q->data;
if (p->data == 0) {
s = p;
p = p->next;
} else
{
r = p;
p = p->next;
}
s = q;
q = q->next;
free(s);
}
}
printf("End of while.\r\n");
if (p == NULL) {
r->next = q;
} else {
r->next = p;
}
printf("Addition ends.\r\n");
}
6,全部代码
#include <stdio.h>
#include <stdlib.h>
typedef struct List
{
int data;
int exponent;
struct List*next;
}*ListPtr,*NodePtr;
ListPtr initLinkList()
{
ListPtr Header=(ListPtr)malloc(sizeof(ListPtr));
Header->data=0;
Header->exponent=0;
Header->next=NULL;
return Header;
}
void printList(ListPtr Header){
NodePtr p = Header->next;
while (p != NULL) {
printf("%d * 10^%d + ", p->data, p->exponent);
p = p->next;
}
printf("\r\n");
}
void NewList(ListPtr Header, int paraData, int paraExponent){
NodePtr p, q;
q = (NodePtr)malloc(sizeof(ListPtr));
q->data = paraData;
q->exponent = paraExponent;
q->next = NULL;
p = Header;
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->data = p->data + q->data;
if (p->data == 0) {
s = p;
p = p->next;
} else
{
r = p;
p = p->next;
}
s = q;
q = q->next;
free(s);
}
}
printf("End of while.\r\n");
if (p == NULL) {
r->next = q;
} else {
r->next = p;
}
printf("Addition ends.\r\n");
}
void addTest()
{
ListPtr tempList1=initLinkList();
NewList(tempList1,7,0);
NewList(tempList1,3,1);
NewList(tempList1,9,8);
NewList(tempList1,5,17);
printList(tempList1);
ListPtr tempList2=initLinkList();
NewList(tempList2,8,1);
NewList(tempList2,22,7);
NewList(tempList2,-9,8);
printList(tempList2);
add(tempList1,tempList2);
printf("结果为:");
printList(tempList1);
printf("\r\n");
}
int main()
{
addTest();
}
7,运行结果