Делфи, цепной список. нашёлся такой пример:
type
TData = Integer;
TPElem = ^TElem;
TElem = record
Data : TData;
PNext, PPrev : TPElem;
end;
TList = record
PFirst, PLast : TPElem;
end;
procedure ListFree(var aList : TList);
var
PNext, PDel : TPElem;
begin
if aList.PFirst = nil then Exit;
PNext := aList.PFirst;
while PNext <> nil do
begin
PDel := PNext;
PNext := PNext^.PNext;
Dispose(PDel);
end;
aList.PFirst := nil;
aList.PLast := nil;
end;
procedure AddL(var aList : TList; const aPElem : TPElem);
begin
if aPElem = nil then Exit;
aPElem^.PNext := nil;
aPElem^.PPrev := nil;
if aList.PFirst = nil then
begin
aList.PFirst := aPElem;
aList.PLast := aPElem;
end
else
begin
aList.PLast^.PNext := aPElem;
aPElem^.PPrev := aList.PLast;
aList.PLast := aPElem;
end;
end;
procedure Del(var aList : TList; const aPDel : TPElem);
begin
if (aList.PFirst = nil) or (aPDel = nil) then Exit;
if aPDel^.PPrev <> nil then
aPDel^.PPrev^.PNext := aPDel^.PNext
else
aList.PFirst := aPDel^.PNext;
if aPDel^.PNext <> nil then
aPDel^.PNext^.PPrev := aPDel^.PPrev
else
aList.PLast := aPDel^.PPrev;
end;
procedure Print(const aList : TList);
var
PElem : TPElem;
begin
PElem := aList.PFirst;
while PElem <> nil do begin
if PElem <> aList.PFirst then Write(', ');
Write(PElem^.Data);
PElem := PElem^.PNext;
end;
Writeln;
End.
помогите сделать переход к следующему элементу, последнему и первому