Лекция: Вставка элемента в начало списка.
Procedure Ins_beg_list(P: el; {адрес включаемого элемента}
Var First: el);
Begin
If First = Nil Then
Begin
First := p;
P^.next := nil{ можно не делать, так как уже сделано при
формировании этого элемента}
End
Else
Begin
P^.Next:=First;{ссылка на бывший первым элемент}
First:=p;{ включаемый элемент становится первым }
End;
End;
Включение элемента в конец списка.
Procedure Ins_end_list(P: el; Var First: el);
Begin
If First = Nil Then
First:=p
Else
Begin
q:=First;{цикл поиска адреса последнего элемента}
While q^.Next <> Nil do
q:=q^.Next;
q^.Next:=p;{ссылка с бывшего последнего
на включаемый элемент}
P^.Next:=Nil;{не обязательно}
End;
End;
Включение в середину (после i-ого элемента).
Procedure Ins_after_I ( first: el; p: el; i: integer);
Var
t, q: el;
K ,n: integer;
Begin
n := count_el(first);{определение числа элементов списка}
if (i < 1 ) or ( i > n )then
Begin
writeln ('i задано некорректно');
Exit;
End
Else
Begin
if i = 1 then
Begin
t := first;{адрес 1 элемента}
q := t^.next;{адрес 2 элемента}
t^.next := p;
p^.next := q;
End
Else
if i = n then
begin{ см. случай вставки после последнего
элемента}
.. .
End
else{вставка в «середину» списка}
Begin
t := first;
k := 1;
while ( k < i ) do
begin{поиск адреса i-го элемента}
k := k + 1;
t := t^.next;
End;
q := t^.next;
{найдены адреса i-го (t) и i+1 -го (q) элементов }
t^.next := p;
p^.next := q;
{элемент с адресом р вставлен}
End;
End;
End;
ПРИМЕЧАНИЕ: аналогично рассуждая и применяя графическое представление действия, можно решить задачу включения элемента перед i-ым. Строго говоря, такая задача не эквивалентна задаче включения элемента после (i-1)-го.