SetEmpty(S);
Begin
S.last:=nil;
end;
Удалить из списка S элемент, следующий за элементом, находящимся в позиции pos памяти
Procedure Del(S,pos);
Begin
if S.last
nil
then {if S.last=pos^.next
then if S.last=pos
then S.last:=nil;
else {S.last:=pos; pos^.next:=pos^.next^.next}
else pos^.next:=pos^.next^.next}
else {список пуст}
end;
При использовании процедуры Del могут возникнуть проблемы, связанные с некорректным обращением, так как в процедуре не производится проверка того, является ли позиция pos позицией какого-либо элемента списка S. Ответственность за некорректное обращение несет вызывающая программа. Проверка этого условия с помощью сканирования списка могла бы оказаться слишком дорогой и свела бы на нет преимущества использования связных списков. Еще одна проблема, связанная с использованием этой операции, заключается в том, что узел pos^ может оказаться недоступным при потере значения переменной pos, но память будет оставаться занятой. Если это нежелательно, следует, воспользовавшись системными средствами, освободить занимаемую узлом память. Если системными средствами это сделать затруднительно, то можно просто завести список, в котором содержатся освобожденные узлы. Существование такого списка должно учитываться при написании процедуры create. Замечания по поводу некорректного обращения будут справедливы и для некоторых следующих процедур, однако, мы не будем каждый раз напоминать об этом.
Вставка в конец списка S элемента e
Procedure AddToEnd(S,e);
Begin
create(t:[e,nil]);
if S.last=nil
then t^.next:=t;
else t^.next:=S.last^.next;
S.last:=t;
end;