Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 2. Mär 2003, 21:54
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;
  Mit Zitat antworten Zitat