Программа внесения элементов односвязного списка - Pascal

Формулировка задачи:

Дан список. После каждого элемента списка добавить ту часть списка, которая была перед ним.

Код к задаче: «Программа внесения элементов односвязного списка - Pascal»

textual
type
  tList = ^rList;
  rList = record
    n : Integer;
    x : tList;
  end;
 
function rnd : Integer;
begin
  rnd := Random(100);
end;
 
function CreateList(count : Integer) : tList;
var List, Last, Cur : tList;
begin
  New(List); List^.n := rnd; Last := List;
  while count > 1 do
    begin
      New(Last^.x); Last := Last^.x; Last^.n := rnd; dec(count);
    end;
  Last^.x := nil;
  CreateList := List;
end;
 
procedure OutList(List : tList);
begin
  while List <> nil do begin Write(List^.n:3); List := List^.x; end; WriteLn;
end;
 
procedure ConvertList(var List : tList);
var
  Cur, tmp, tail, add : tList;
begin
  Cur := List; while Cur^.x <> nil do Cur := Cur^.x;
  repeat
    tmp := List;
    tail := Cur^.x;
    add := Cur;
    while tmp <> Cur do
      begin
        New(add^.x); add := add^.x; add^.n := tmp^.n; tmp := tmp^.x;
      end;
    add^.x := tail;
    tail := Cur;
    Cur := List; while Cur^.x <> tail do Cur := Cur^.x;
  until Cur = List;
end;
  
var
  List : tList;
begin
  Randomize;
  List := CreateList(10);
  WriteLn('Список:'); OutList(List);
  ConvertList(List);
  WriteLn('Новый список:'); OutList(List);
end.

5   голосов, оценка 3.800 из 5


СОХРАНИТЬ ССЫЛКУ