Advertisement
Matixs

Untitled

May 30th, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.09 KB | None | 0 0
  1. Procedure TCandidateList.DeleteCandidate(NodeToDel: PCandidateList);
  2. Var
  3.     Temp : PCandidateList;
  4. Begin
  5.     // Если список пустой
  6.     if (Head = NIL) AND (NodeToDel = NIL) then
  7.         Exit;
  8.  
  9.     // Если узел к удалению = голове
  10.     if NodeToDel = Head then
  11.     begin
  12.         Head := NodeToDel^.Next; // Голове присвоить следующий узел
  13.  
  14.         // Если голова не пустая
  15.         if Head <> NIL then
  16.         begin
  17.             Head^.Prev := NIL;
  18.         End
  19.         else // Если голова пустая
  20.         begin
  21.             Tail := NIL;
  22.         end;
  23.  
  24.         // Уничтожение объекта
  25.         Dispose(NodeToDel);
  26.     end
  27.     else // Если узел к удалению = хвосту
  28.         if NodeToDel = Tail then
  29.         begin
  30.             // Присвоить хвосту предыдущий элемент
  31.             Tail := Tail^.Prev;
  32.             // Если хвост не пустой
  33.             if Tail <> NIL then
  34.             begin
  35.                 Tail^.Next := NIL;
  36.             end
  37.             else // Если хвост пустой
  38.             begin
  39.                 Head := NIL;
  40.             end;
  41.  
  42.             // Уничтожение объекта
  43.             Dispose(NodeToDel);
  44.         end
  45.         else // Если узел к удалению <> HEAD and TAIL
  46.         begin
  47.             Temp := Head;
  48.  
  49.             // Пока Next текущего узла <> узлу к удалению
  50.             while Temp^.Next <> NodeToDel do
  51.             begin
  52.                 Temp := Temp^.Next;
  53.             end;
  54.  
  55.             Temp^.Next := NodeToDel^.Next;
  56.  
  57.             // Если NEXT узла к удалению <> NIL
  58.             if NodeToDel^.Next <> NIL then
  59.             begin
  60.                 NodeToDel^.Next^.Prev := Temp;
  61.             end;
  62.  
  63.             // Уничтожение объекта
  64.             Dispose(NodeToDel);
  65.         end;
  66.  
  67.     // Уменьшить счетчик количества записей
  68.     Dec(Count);
  69. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement