Pascal, Delphi Linked lists [closed]

Something like this:

type
  TOccurencyNodePtr = ^TOccurencyNode;
  TOccurencyNode = record
    Occurency: integer;
    Next: TOccurencyNodePtr;
  end;

  TIdentifierFoundNodePtr = ^TIdentifierFoundNode;
  TIdentifierFoundNode = record
    Identifier: string;
    Next: TIdentifierFoundNodePtr;
  end;

var
  Occurencies: TOccurencyNodePtr = nil;
  Identifiers: TIdentifierFoundNodePtr = nil;

procedure AddIdentifierOccurency(const Identifier: string; const Occurrency: Integer);
var
  IdentifierNode, LastIdentifierNode: TIdentifierFoundNodePtr;
  OccurencyNode, LastOccurencyNode: TOccurencyNodePtr;
begin
  IdentifierNode := Identifiers;
  LastIdentifierNode := nil;
  while (IdentifierNode <> nil) and (IdentifierNode.Identifier <> Identifier) do
  begin
    LastIdentifierNode := IdentifierNode;
    IdentifierNode := IdentifierNode.Next;
  end;
  if IdentiferNode = nil then
  begin
    New(IdentifierNode);
    IdentifierNode.Identifier := Identifier;
    IdentifierNode.Next := nil;
    if Identifiers = nil then
      Identifiers := IdentifierNode
    else
      LastIdentifierNode.Next := IdentifierNode;
  end;

  OccurencyNode := Occurencies;
  LastOccurencyNode := nil;
  while (OccurencyNode <> nil) and (OccurencyNode.Occurency <> Occurency) do
  begin
    LastOccurencyNode := OccurencyNode;
    OccurencyNode := OccurencyNode.Next;
  end;
  if OccurencyNode = nil then
  begin
    New(OccurencyNode);
    OccurencyNode.Occurency := Occurency;
    OccurencyNode.Next := nil;
    if Occurencies = nil then
      Occurencies := OccurencyNode
    else
      LastOccurencyNode.Next := OccurencyNode;
  end;
end;

Leave a Comment