program AlisaTest;

{$APPTYPE CONSOLE}

{   Задание:
	Создать линейный односвязный список из целых чисел по типу очереди.
	Вывести на экран созданный список.
	Определить, есть ли в списке центральный элемент.
	Вывести на экран найденный элемен или сообщение о его отсутствии.
	Освободить динамически выделенную память
}

type PElement = ^TElement;

TElement = record
	data: integer;
	next: PElement;
end;

var first_element: PElement; // указатель на начальный элемент списка
	last_element: PElement; // указатель на элемент списка, созданный последним
	new_element: PElement; // указатель на начальный элемент списка
	n: integer; // количество элементов списка для ввода
	i: integer; // переменная цикла
	j: integer; // очередное введенное число

begin

	// считываем n для тестирования
	Write('n='); ReadLn(n);

	first_element := nil;
	last_element := nil;
	new_element := nil;


	// считываем n целых числе и создаем оодносвязный список
	for i := 1 to n do
	begin
		// вводим очередное челое число в переменную j
		Write('n['); Write(i); Write(']=');	ReadLn(j);

		// на основе введеенной переменно создаем новый элемент списка
		new(new_element); // выделяем память под новый элемент списка
		new_element^.data := j; // данные списка
		new_element^.next := nil; // у нас еще нет следующего элемента

		// если у нас начальный элемент не был задан, значит, имеем дело с начальным элементом
		if (first_element = nil) then first_element := new_element;

		// если у нас имеется созданный ранее последний элемент,
		// устанавливаем его указатель на только что созданный элемент
		if (last_element <> nil) then last_element^.next := new_element;

		// запоминаем последний созданный элемент
		last_element := new_element;
	end;

	// выводим элементы списка
	n := 0; // для чистоты эксперимента подсчитаем количество элементов списка
	last_element := first_element;
	while (last_element <> nil) // продолжаем, пока есть очередной элемент в списке
	do begin
		write('element.data = '); write(last_element^.data);  WriteLn('');
		inc(n);
		last_element := last_element.next; // выбираем следующий элемент
	end;

	// центральный элемент есть, если n - нечетное
	if (n mod 2 = 1)
	then begin
		// ищем элемент с номером n div 2 + 1
		i := 0;
		last_element := first_element;
		while (i < n div 2)
		do begin
			inc(i);
			last_element := last_element.next; // выбираем следующий элемент
		end;
		// выводим найденный элемент
		write('central element.data = '); write(last_element^.data);  WriteLn('');
	end
	else begin
		writeln('central element: no');
	end;

	// освобождаем выделенную память
	while (first_element <> nil)
	do begin
		last_element := first_element.next; // запоминаем указатель на следующий элемент
		dispose(first_element); // удаляем текущий элемент
		first_element := last_element; // смещаемся вперед
	end;

	ReadLn;
end.