Lista dinámica doblemente enlazada function E l i m i n a r p o s i c i o n ( P : tPos ; var L i s t a : t L i s t a ) : boolean ; begin if not E x i s t e p o s i c i o n (P , L i s t a ) then E l i m i n a r p o s i c i o n := f a l s e e l s e begin i f P=L i s t a then begin L i s t a := L i s t a ˆ . s i g ; i f L i s t a <>n u l o {mas de un e l e m e n t o } then L i s t a ˆ . ant := n u l o ; end e l s e begin Pˆ . ant ˆ . s i g :=Pˆ . s i g ; i f Pˆ . s i g <> n u l o then Pˆ . s i g ˆ . ant :=Pˆ . ant end d i s p o s e (P) E l i m i n a r p o s i c i o n := true ; end end ; function E l i m i n a r c o n t e n i d o ( x : t I n f o ; var L i s t a : t L i s t a ) : boolean ; var p : t p o s ; begin P:= L o c a l i z a e l e m e n t o ( x , L i s t a ) ; if P = nulo then E l i m i n a r c o n t e n i d o := f a l s e e l s e begin Eliminar nodo (P , Lista ) ; E l i m i n a r c o n t e n i d o := true ; end end ; procedure E l i m i n a r n o d o ( P : tPos ; var L i s t a : t L i s t a ) ; {PreCond : P p o s i c i o n v a l i d a en l a l i s t a } begin i f P=L i s t a then begin L i s t a := L i s t a ˆ . s i g ; if L i s t a <>n u l o {mas de un e l e m e n t o } then L i s t a ˆ . ant := n u l o ; end e l s e begin Pˆ . ant ˆ . s i g :=Pˆ . s i g ; i f Pˆ . s i g <> n u l o then Pˆ . s i g ˆ . ant :=Pˆ . ant end d i s p o s e (P) end ;