type  liste          = ^listeneintrag;
      listeneintrag  = record
                         eintrag    :  listeninhalt;
                         naechster  :  liste
                       end;

function  passt(x, y : listeninhalt) : boolean;
  begin
    passt:= not(kleiner(x,y)  or  kleiner(y,x))
  end;

procedure  einfuegen(var l : liste; e : listeninhalt);
  var  q,p  : liste;
  begin
    q:=nil;  p:=l;
    while p<>nil do with p^ do
          if kleiner(eintrag,e) then begin q:=p; p:=naechster end
                                else p:=nil; new(p); p^.eintrag:=e;
          if q=nil then begin p^.naechster:=l; l:=p  end
                   else begin p^.naechster:=q^.naechster;q^.naechster:=p end;
   end;

procedure  loeschen(var l : liste;  p : liste);
  var  q : liste;
  begin  q:=p^.naechster;
    if q<>nil then begin p^:=q^; dispose(q) end
              else if p=l then begin l:=nil; dispose(p) end
                          else begin
                                 q:=l; while q^.naechster<>p
                                         do q:=q^.naechster;
                                            q^.naechster:=p^.naechster;
                                            dispose(p)
                               end;
  end;

procedure suchen(l : liste;  e : listeninhalt;  var p : liste);
  var gefunden : boolean;
  begin
    p:=l;  gefunden:=false;
    while (p<>nil) and (not gefunden) do
      begin
        gefunden:=passt(p^.eintrag,e);
        if not gefunden then p:=p^.naechster
      end;
  end;