Removing last object from the linked list doesn't update
FEnd variable, so it STILL points at already removed
item, and adding another object doesn't work right.
So, in TLinkedList.Remove(AObject: TObject) instead of
if Old <> nil then
Old.Next := Current.Next;
else
FStart := Current.Next;
It should be
if Old <> nil then
Begin
Old.Next := Current.Next;
If Old.Next=Nil Then
FEnd:=Old;
End
else
FStart := Current.Next;
Similar modification should be done in
TLinkedList.Remove(Index: Integer)
Also I see similar problems in all Remove methods for
other LinkedList classes.