链表案例之多项式相加
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define ERROR 1
#define FALSE 0
#define OK 1
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct Lnode{
int data;
int e;
struct Lnode *next;
}Lnode, *LinkList;
void CreateList_R(LinkList &L, int n){
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
Lnode *r=L;
printf("请输入项数为%d多项式,以空格隔开:\n",n);
for(int i=1;i<=n;i++){
Lnode *p;
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d*x**%d",&p->data,&p->e);
p->next=NULL;
r->next=p;
r=p;
}
}
void SumList(LinkList &La,LinkList &Lb){
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
pc=La;
Lnode *Lc=La;
while(pa&&pb){
if(pa->e<pb->e){
pc->next=pa;
pa=pa->next;
}
else if(pa->e==pb->e){
pa->data=pa->data+pb->data;
pc->next=pa;
pa=pa->next;
pb=pb->next;
}
else{
pc->next=pb;
pb=pb->next;
}
pc=pc->next;
}
pc->next=pa?pa:pb;
free(Lb);
}
void PrintList_L(LinkList &L){
Lnode *p;
int count=0;
p=L->next;
while(p){
printf("%d*x**%d ",p->data,p->e);
p=p->next;
count++;
}
printf("\n链表的长度为%d(不包含头结点)",count);
printf("\n----------------------------\n");
}
int main(){
LinkList LA,LB;
CreateList_R(LA,5);
PrintList_L(LA);
CreateList_R(LB,3);
PrintList_L(LB);
SumList(LA,LB);
PrintList_L(LA);
}