Удаление элемента из конца списка производится, когда указатель dx показывает на предпоследний элемент списка, а х – на последний.
Изобразим удаление графически:
{Найдем предпоследний элемент}
x:= Head;
dx:=Head;
while x^.Next<>Nil do
Begin
dx:= x;
x:= x^.Next;
End;
{Удаляем элемент x^ из списка и освобождаем занимаемую им память}
dx^.Next:= Nil;
Dispose(x);
Теперь опишем процедуру удаления элементов из списка в общем случае:
Procedure Del(Gigit: integer; Var u: Ukazatel);
Var
x, dx: UKAZATEL;
Begin
x:= Head;
while x<>Nil do
if x^.Data=Digit
then
Begin
if x=y
then
Begin
Head:= Head^.Next;
Dispose(x);
x:= Head;
End;
else
Begin
dx^.Next:= x^.Next;
Dispose(x);
x:= dx^.Next;
End;
End;
else
Begin
dx:= x;
x:= x^.Next;
End;
End;
Задание. Напишите полный текст программы, решающей рассматриваемую задачу. Протестируйте программу, дополните комментарием покажите учителю для оценки.