На этом шаге мы рассмотрим удаление звена однонаправленного кольцевого списка с удаленным заглавным звеном..
Удаление звена, на которое указывает pCKey, осуществляется процедурой:
Procedure Del_Elem1 (pCKey: PtrRec); Var q, pAux: PtrRec; Begin If pCKey^.pNext=pCKey Then Begin pBegin^.pNext := Nil; Writeln ('Кольцо пусто!') End Else Begin q := pBegin; pAux := pBegin^.pNext; While pAux <> pCKey do Begin q := pAux; pAux := pAux^.pNext; End; q^.pNext := q^.pNext^.pNext; Dispose (pAux); End End;
Удаление звена, следующего за звеном, заданным указателем pCKey, осуществляется процедурой:
Procedure Del_Elem2 (pCKey: PtrRec); Var pAux: PtrRec; Begin If pCKey^.pNext <> pBegin^.pNext Then Begin pAux := pCKey^.pNext; pCKey^.pNext := pCKey^.pNext^.pNext; Dispose (q); End Else If pCKey^.pNext=pCKey Then Begin Writeln ('Кольцо пусто!'); pBegin^.pNext := Nil; Dispose (pCKey); End Else Begin pAux := pBegin^.pNext; pCKey^.pNext := pCKey^.pNext^.pNext; p:= pCKey^.pNext; {ПРОВЕРИТЬ!!!} Dispose (pAux); End End;
На следующем шаге мы рассмотрим двунаправленные списки.