#include <stdio.h> #include <stdlib.h> typedef struct node* Node; struct node{ int exp; float coe; Node next; }; Node input(void); Node add(Node p1,Node p2); void attach(int e,float c,Node *rear); void print(Node p); int main() { Node P1,P2,P3; printf("there2\n"); P1 = input(); print(P1); printf("there3\n"); P2 = input(); print(P2); printf("there1\n"); P3 = add(P1,P2); printf("there4\n"); print(P3); system( "PAUSE "); return 0; } Node input(void) { int N,i; int tempe; float tempc; Node p,p1; Node temp; p = (Node)malloc(sizeof(struct node)); p->next = NULL; p1 = p; scanf("%d ",&N); for(i=0;i<N;i++) { scanf("%d %f ",&tempe,&tempc); p1->next = (Node)malloc(sizeof(struct node)); p1 = p1->next; p1->exp = tempe; p1->coe = tempc; p1->next = NULL; } temp = p; p = p->next; free(temp); return p; } Node add(Node P1,Node P2) { Node p, rear,temp; p = (Node)malloc(sizeof(struct node)); p->next = NULL; rear = p; printf("there5\n"); while(P1 && P2) { printf("there10\n"); if(P1->exp > P2->exp) { attach(P1->exp,P1->coe,&rear); P1 = P1->next; } else if(P1->exp < P2->exp) { printf("there8\n"); attach(P2->exp,P2->coe,&rear); printf("there9\n"); P2 = P2->next; } else { if((P1->coe+P2->coe)) //浮点数为0的判断,需注意 attach(P2->exp,P1->coe+P2->coe,&rear); P2 = P2->next; P1 = P1->next; } } printf("there7\n"); while(P1) { printf("there11\n"); attach(P1->exp,P1->coe,&rear); P1 = P1->next; } while(P2) { printf("there12\n"); attach(P2->exp,P2->coe,&rear); P2 = P2->next; } temp = p; p = p->next; free(temp); printf("there6\n"); return p; } void attach(int e,float c,Node *rear) { Node temp; temp = (Node)malloc(sizeof(struct node)); temp->exp = e; temp->next = NULL; temp->coe = c; ((*rear)->next) = temp; (*rear) = temp; } void print(Node p) { int cnt = 0,i = 0; Node temp; temp = p; while(temp) { cnt++; temp = temp->next; } printf("%d ",&cnt); for(;i<cnt-1;i++) { printf("%d ",&(p->exp)); printf("%f ",&(p->coe)); p = p->next; } printf("%d ",&(p->exp)); printf("%f",&(p->coe)); }
原文:https://www.cnblogs.com/katyusha1/p/12660556.html