// Выделение динамической памяти
// Использование указателей для создания односвязного списка
type 
  PNode = ^TNode;
  TNode = record
    data: integer;
    next: PNode;
  end;

function NewNode(d: integer; n: PNode): PNode;
begin
  New(Result);
  Result^.data := d;
  Result^.next := n;
end;

var first: PNode;
  
begin
  first := nil;
  // Добавляем в начало односвязного списка
  first := NewNode(3,first);
  first := NewNode(7,first);
  first := NewNode(5,first);
  
  // Вывод односвязного списка
  writeln('Содержимое односвязного списка: ');
  var p := first;
  while p<>nil do
  begin
    write(p^.data,' ');
    p := p^.next;
  end;
  
  // Разрушение односвязного списка
  p := first;
  while p<>nil do
  begin
    var p1 := p;
    p := p^.next;
    Dispose(p1);
  end;
end.  