typedef
создает новый «тип» в вашей программе, поэтому возвращаемое значение и типы параметров этих функций - это просто ваша структура. Это просто сокращение для использования struct node
для типа.
Если бы вы создали новый узел, вы могли бы сделать это так (используя тип):
LLIST *node = malloc(sizeof(LLIST));
node->data = 4;
node->next = someOtherItem;
list_add(node, 1)
Кроме того, с прототипами функций в вашем вопросе вам не нужны двойные указатели; поскольку данные в вашей структуре просто int
, вы можете сделать что-то вроде
LLIST *list_add(int data, int position);
тогда функция list_add
будет обрабатывать выделение, скопировать int
в структуру и добавить его в связанный список.
Поместить его в определенную позицию так же просто, как изменить указатель next
в узле перед ним на адрес вновь выделенного узла и указатель next
в новом узле, чтобы он указывал на следующий. (тот, на который ранее указывал узел),
Имейте в виду, что (учитывая остальные прототипы функций) вам придется отслеживать указатели на каждый созданный вами узел, чтобы удалить их все.
Я не уверен, что понимаю, как будет работать функция поиска. Все это может быть реализовано намного лучше. Вы не должны иметь для указания местоположения узла при его создании (что, если вы укажете большее число, чем число узлов?) И т. Д.