@KagelBull

Каково назначение данной функции для односвязного списка?

Каково назначение функции f? Я только понял, что она добавляет узел в односвязный список. Но куда добавляет не понятно, то ли создается новый корневой узел, то ли ещё что-то.
Конкретно непонятна последняя строчка функции *s=el;

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;
}
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@TheCalligrapher
Функция добавляет новый элемент в начало односвязного списка и, соответственно, обновляет указатель на начало списка. Именно обновление указателя на начало списка и делается через присваивание *s = el.

Это функция также может быть использована для вставки элемента в середину списка, если в качестве параметра s будет передаваться указатель на поле next предыдущего элемента. (Другими словами, вставка элемента в середину списка - это ни что иное, что вставка элемента в начало правого подсписка, начинающегося в точке вставки.)

P.S. Функция написана стилистически кривовато: делает ненужное приведение типа на результате malloc и не пользуется очевидной возможностью выполнить инициализацию переменной el (вместо присваивания).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы