Первый узел создается отдельно (т.к. включить узел «за» несуществующим узлом невозможно), а остальные (n-1) узлов создаются и включаются в хвост списка одинаковым образом. При этом удобно использовать вспомогательный указатель на последний добавленный узел. Значение этого указателя изменяется в процессе создания списка, значение указателя на первый узел списка не изменяется после создания первого узла. Порядок следования узлов в списке получается прямым, т.к. первым является тот узел, который был включен в список первым.
Procedure Create2(var first: PList;
n: byte);
var p, last: PList; i: byte;
| { first – указатель на первый узел списка,
n – количество узлов в списке }
{ last – указатель на последний узел списка }
|
begin
if n=0 then first:=nil
else begin
|
{ создание пустого списка }
|
new(first);
| { создание первого узла списка }
|
readln(first^.info);
| { заполнение информационного поля первого узла }
|
first^.link:=nil;
| { первый узел пока является в списке единственным }
|
last:=first;
| { установка указателя на последний вставленный узел}
|
for i:=2 to n do begin
| { создание остальных (n-1) узлов списка }
|
new(p);
| { создание узла списка }
|
readln(p^.info);
| { заполнение информационного поля узла }
|
last^.link:=p;
| { установка связи между списком и вставленным узлом }
|
last:=p;
| { новое значение указателя на последний узел }
|
end;
end;
end;
|
|
| | |