Er er von "den Pointer auf das erste Element setze" schreibt, muss man wohl von verketteten Listen ausgehen. Nun kommt es noch daran an, ob eine einfach oder mehrfach verkettete Liste gemeint ist.
Einfach:
Delphi-Quellcode:
type
PListe = ^TListe;
TListe = record
Next: PListe;
Data: Integer;
end;
var
Root: PListe; // Zeigt immer auf das erste Element
procedure AddItem(Data: Integer);
var p, Node: PListe;
begin
New(p); // neues Element erzeugen
p^.Next := nil; // wird als letztes Element in die Liste eingefügt
p^.Data := Data;
if Root = nil then
begin
// noch nichts in der Liste, dann wird die Liste das neue Element selbst
Root := p;
end
else
begin
// Neues Element ganz hinten hinzufügen. Dazu muss die gesamte
// Liste durchlaufen werden
Node := Root;
while (Node^.Next <> nil) do Node := Node^.Next;
Node^.Next := p; // Dem letzten Element als nächstes das neue hinzufügen
end;
end;
procedure DeleteItem(Data: Integer);
var Node, PreNode: PListe;
begin
if Root = nil then Exit; // nichts was man löschen könnte vorhanden
if Root^.Data = Data then
begin
// Das 1. Element muss gelöscht werden
Node := Root^.Next; // Zeiger auf das nächste Element sichern
Dispose(Root); // 1. Element freigeben
Root := Node; // und neues 1. Element festlegen
end
else
begin
PreNode := Root; // vorheriges Element
Node := Root^.Next; // zu prüfendes Element
while (Node <> nil) do
begin
if Node^.Data = Data then
begin
PreNode^.Next := Node^.Next; // Node aus der Liste entfernen
Dispose(Node); // Node freigeben
Break; // und Löschvorgang beenden
end;
PreNode := Node;
Node := Node^.Next;
end;
end;
end;