Лабораторная работа: Структуры и алгоритмы обработки данных
Else //иначе
Begin
qq:=sag^.next; //запоминаем адрес первого элемента
q:=qq^.next; //запоминаем адрес второго элемента
if (q^.next= Nil) then {если адресная часть второго элемента указывает на конец списка (это означает что в ЛОС только два элемента)}
Begin
sag^.next:=Nil; {в адресную часть начала ЛОС заносим указатель на конец списка}
dispose(q); //удаляем адрес первого элемента
dispose(q); //удаляем адрес второго элемента
End
Else //иначе
Begin
q:= sag^.next; //запоминаем адрес второго элемента
sag^.next:=q^.next; {в адресную часть первого элемента заносим адрес второго элемента}
dispose(k); //удаляем адрес первого элемента
q:= sag^.next; //запоминаем адрес первого элемента
qq:=q^.next; //запоминаем адрес второго элемента
While (q<>Nil)do {цикл удаления последнего элемента
проходим по списку, до тех пор, пока указатель не будет равен значению, указателя на конец списка}
Begin
kk:=q; //запоминаем адрес текущего элемента
q:=q^.next; //запоминание следующего адреса
k:= qq; //запоминаем адрес следующего элемента
qq:=qq^.next; //запоминание следующего адреса
ifqq=Nilthen {если адресная часть следующего элемента указывает на значение конца списка значит мы нашли адрес последнего элемента ЛОС}
Begin
kk^.next:= qq; {заносим в адресную часть предыдущего элемента значение конца списка}
q:=kk^.next; {запоминание в переменную указателя, значение конца списка для выхода из цикла}
dispose(k); //удаляем адрес последнего элемента