Чтобы любой struct
был узлом в linked-list
, вам необходим self-referential structure variable
, который должен быть объявлен как struct Node *next;
struct Node{
int *arr;
int *sol;
struct Node *next;
}
Чтобы выделить память для узла связанного списка, вам необходимо:
/* allocate memory for a node */
struct Node * MyNode = (struct Node *)malloc((int)sizeof(struct Node));
if (MyNode == NULL) {
printf("ERROR: unable to allocate memory \n");
return 1;
}
/* allocate memory for the content of a node */
MyNode->arr = (int *) malloc((int)sizeof(int) * N);
if (MyNode->arr == NULL) {
printf("ERROR: unable to allocate memory \n");
return 1;
}
MyNode->sol = (int *) malloc((int)sizeof(int) * N);
if (MyNode->sol == NULL) {
printf("ERROR: unable to allocate memory \n");
return 1;
}
/* add the new node to a list by updating the next variable */
MyNode->next = ...
Если вы не уверены в операциях, которые необходимо выполнить для удаления узла в связанном списке, вы можете использовать переменную temp
, чтобы сделать то же самое проще.
pop()
{
struct Node * temp = first;
first = first->next;
free(temp->arr);
free(temp->sol);
free(temp);
}
Правило большого пальца для free
- для каждого malloc()
должно быть free()
OTOH, чтобы пройти различные сценарии удаления узла в связанном списке, пожалуйста, обратитесь к этой ссылке.