#include <stdio.h>
#include <stdlib.h>
//Написать функцию, которая удаляет из многочлена все слагаемые с нечетными степенями.
struct Node {
unsigned degree;
int coefficient;
struct Node* next;
};
typedef struct Node Node;
struct Polynom {
Node* head;
Node* tail;
};
typedef struct Polynom Polynom;
//выделяет память под вершину и возвращает указатель на эту вершину
Node* createNode(int coeff, int degree){
Node* node=(Node*)calloc(1, sizeof(Node)); //выделяем память под корень списка
node->coefficient=coeff;
node->degree=degree;
node->next=NULL; //последний узел списка вот
return node;
}
//вызывает createNode, ставит указатель на новую вершину в хвост данного списка
Node* addNode (int degree, int coeff, Node* tail) {
// создаем вершину
Node* item=createNode(degree, coeff);
// прикрепляем к хвосту вершину
tail->next=item;
// возвращаем указатель на эту вершину
return item;
}
void printList(Node* head){
Node* current = head;
while(current){
printf("%dx^%d", current->coefficient, current->degree);
current = current->next;
if (current && current->coefficient > 0) printf ("+");
}
printf("\n");
}
//принимает последовательность коэф-тов и создает нужный список.
Polynom* createPolynom(){
Polynom* poly =(Polynom*)calloc(1, sizeof(Polynom));
int amount, c , d;
printf("введите кол-во одночленов:");
scanf("%d", &amount);
scanf("%d %d", &c, &d);
poly->head=createNode(c, d);
poly->tail = poly->head;
for(int i=0; i<amount-1;i++){
scanf("%d %d", &c,&d);
poly->tail = addNode(c,d, poly->tail);
}
return poly;
}
void deleteNode(Node* head){
Node* current=head; //указатель на 1 элемент(корень)
Node* node1;
Node* node2=NULL;
node1=current->next; //нода, которая следует за текущей
if(current->degree%2==0){
if(current==head) //если это первый элемент
head=node1; //то первый элемент становится следующим
if(!node1) //если нода последний элмент
node1=node2;
if(node2)
node2->next=node1;
free(current);
current=node1;
}
}
int main(){
Polynom* polynom;
polynom = createPolynom();
printList(polynom->head);
deleteNode(polynom->head);
printList(polynom->head);
return 0;
}