Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Procedure TCandidateList.DeleteCandidate(NodeToDel: PCandidateList);
- Var
- Temp : PCandidateList;
- Begin
- // Если список пустой
- if (Head = NIL) AND (NodeToDel = NIL) then
- Exit;
- // Если узел к удалению = голове
- if NodeToDel = Head then
- begin
- Head := NodeToDel^.Next; // Голове присвоить следующий узел
- // Если голова не пустая
- if Head <> NIL then
- begin
- Head^.Prev := NIL;
- End
- else // Если голова пустая
- begin
- Tail := NIL;
- end;
- // Уничтожение объекта
- Dispose(NodeToDel);
- end
- else // Если узел к удалению = хвосту
- if NodeToDel = Tail then
- begin
- // Присвоить хвосту предыдущий элемент
- Tail := Tail^.Prev;
- // Если хвост не пустой
- if Tail <> NIL then
- begin
- Tail^.Next := NIL;
- end
- else // Если хвост пустой
- begin
- Head := NIL;
- end;
- // Уничтожение объекта
- Dispose(NodeToDel);
- end
- else // Если узел к удалению <> HEAD and TAIL
- begin
- Temp := Head;
- // Пока Next текущего узла <> узлу к удалению
- while Temp^.Next <> NodeToDel do
- begin
- Temp := Temp^.Next;
- end;
- Temp^.Next := NodeToDel^.Next;
- // Если NEXT узла к удалению <> NIL
- if NodeToDel^.Next <> NIL then
- begin
- NodeToDel^.Next^.Prev := Temp;
- end;
- // Уничтожение объекта
- Dispose(NodeToDel);
- end;
- // Уменьшить счетчик количества записей
- Dec(Count);
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement