struct A{
int info;
struct A *next;
};
void f(struct A **s, int i)
{
struct A *el;
el = (struct A*)malloc(sizeof(struct A));
el->info = i;
el->next = *s;
*s=el;
}
*s = el
.s
будет передаваться указатель на поле next
предыдущего элемента. (Другими словами, вставка элемента в середину списка - это ни что иное, что вставка элемента в начало правого подсписка, начинающегося в точке вставки.)malloc
и не пользуется очевидной возможностью выполнить инициализацию переменной el
(вместо присваивания).