Существует ряд проблем с вашим кодом. Первым из них будет приведение к возвращаемому значению malloc
и неправильная ссылка на размер типа, для которого требуется выделить некоторое пространство:
HEAD = (node *)malloc(sizeof(node));
следует заменить на
HEAD = malloc(sizeof(*HEAD))
Поскольку преобразование из void*
в любой другой тип всегда определено и неявно в C, вы не получите никаких предупреждений о необходимом приведении. Указание sizeof(*HEAD)
заставляет компилятор автоматически выбирать тип HEAD
во время компиляции, тем самым сокращая необходимую работу в случае изменения типа.
Вам также следует помнить, что некоторым компиляторам не нравятся анонимные структуры (то есть структуры без объявленного имени). Поэтому код
typedef struct{
int data;
struct node *next;
} node;
следует заменить на
typedef struct _node {
int data;
struct _node *next;
} node;
которая объявляет структуру с именем _node
, определенную по типу с именем node
. А также исправляет круговую ссылку.
Кроме того, вам не нужно malloc
места для iter
.