788
правок
Fantom78 (обсуждение | вклад) |
Fantom78 (обсуждение | вклад) |
||
Удаление элемента из списка опасно тем, что может разорвать цепочку, и если её не срастить -- указатель будет висеть в никуда.
<source lang="oberon2">
PROCEDURE (l: TDblList)Remove, NEW;
VAR
BEGIN
el:=l.end; (* найти последний элемент *)
el1:=el.backward;(* найти
el:=NIL; (* последний элемент удалить *)
l.end:=el1; (* последним сделать предпоследний *)
el1.forward:=NIL; (* больше никуда не показывает *)
DEC(l.len); (* уменьшить длину *)▼
el1.last:=TRUE; (* выставить правильный флаг *)
ELSE (* остался последний элемент *)▼
▲ DEC(l.len); (* уменьшить длину *)
el:=NIL;▼
el:=l.end
l.
END;▼
END
INC(l.len);
▲ END Remove;
</source>
|
правок