linked list 를 사용하여 다항식 A,B가 지수값과 랜덤값으로 입력받아 더하여 다항식 C를 구하는 프로그램입니다. 근데 addPoly 메소드에서 nullptr 라고 오류가 계쏙 뜹니다. 각 포인터도 addNode를 통해 동적할당과 연결을 해줬는데도 오류가 떠서 어떤게 문제인지 알고 싶어 질문드립니다.
/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
typedef struct node {
int coef;
int expo;
struct node* link;
}; node;
void addNode(node** head, int coef, int expo) {
node* p = *head;
node* temp = (node*)malloc(sizeof(node));
temp->coef = coef;
temp->expo = expo;
temp->link = NULL;
if (*head == NULL) {
*head = temp;
return;
}
while (p->link)p = p->link;
p->link = temp;
}
node* addPoly(node* A, node* B) {
node* C = NULL;
while (A->expo !='\0' || B->expo !='\0') {
if (A->expo > B->expo) {
addNode(&C, A->coef, A->expo);
A = A->link;
}
else if (A->expo < B->expo) {
addNode(&C, B->coef, B->expo);
B = B->link;
}
else
{
if (A->coef + B->coef == 0) {
A = A->link;
B = B->link;
}
else {
addNode(&C, A->coef + B->coef, A->expo);
A = A->link;
B = B->link;
}
}
}
return C;
}
void showList(node* D) {
node* p = D;
while (p) {
printf("%s%dx^%d", p->coef > 0 ? "+" : "", p->coef, p->expo);
p = p->link;
}
}
int SelectPlusMinus(int a) {
int randNum;
randNum = (rand() % 100) + 1;
if (randNum >= 50)
return a;
else
return -a;
}
int main() {
int expo1, expo2;
int rannum1, ranCoef1, coefNum1;
int rannum2, ranCoef2, coefNum2;
srand(time(NULL));
printf("첫번째 다항식의 차수를 입력하세요\n");
scanf("%d", &expo1);
printf("첫번째 다항식을 랜덤으로 생성합니다.\n");
node* A = NULL;
ranCoef1 = (rand() % 10) + 1;
coefNum1 = SelectPlusMinus(ranCoef1);
addNode(&A, coefNum1, expo1);
for (int i = expo1-1; i >= 0; i--) {
rannum1 = (rand() % 100) + 1;
if (rannum1 >= 70) {
ranCoef1 = (rand() % 10) + 1;
coefNum1 = SelectPlusMinus(ranCoef1);
addNode(&A, coefNum1, i);
}
else
continue;
}
showList(A);
printf("\n두번쨰 다항식의 차수를 입력하세요\n");
scanf("%d", &expo2);
printf("두번째 다항식을 랜덤으로 생성합니다.\n");
node* B = NULL;
ranCoef2 = (rand() % 10) + 1;
coefNum2 = SelectPlusMinus(ranCoef2);
addNode(&B, coefNum2, expo2);
for (int j = expo2-1; j >= 0; j--) {
rannum2 = (rand() % 100) + 1;
if (rannum2 >= 70) {
ranCoef2 = (rand() % 10) + 1;
coefNum2 = SelectPlusMinus(ranCoef2);
addNode(&B, coefNum2, j);
}
else
continue;
}
showList(B);
node* C = NULL;
C = addPoly(A, B);
printf("\n계산된 다항식을 출력합니다.\n");
showList(C);
}