Помогите, пожалуйста, разобраться с этой задачей: создать двусвязанный список из целых чисел. Преобразовать его в кольцо. Предусмотреть возможность движения по кольцу в обе стороны с отображением местоположения текущего элемента.
Пользуясь материалом различный FAQ и форумов состряпал представленный ниже код. Добавление элементов в список и закольевание списка в кольцо проходит вроде нормально. Проблема возникает при выводе элементов.
Помогите, пожалуйста, разобраться, почему элементы не выводятся? И если есть ли где ошибки логики?
program Project1_1;
uses
SysUtils;
{$APPTYPE CONSOLE}
type TipElement=Integer;
svqz=^Zveno;
Zveno=Record
sled:svqz;
pred:svqz;
element:TipElement;
end;
var
start:svqz; {nachal'nyi element spiska}
kon:svqz; {konechnyi element spiska}
p:svqz; //!!!
{Добавление в начало списка}
Procedure AddToBegin(a: TipElement);
var
p: svqz;
Begin
New(p);
p^.Element:=a;
If (start=NIL) and (kon=NIL) Then
Begin
p^.pred:=NIL;
p^.sled:=NIL;
start:=p;
kon:=p;
End
Else
Begin
p^.sled:=start;
start^.pred:=p;
p^.pred:=NIL;
start:=p;
End;
End;
{Добавление в конец списка}
Procedure AddToEnd(a: TipElement);
var
p:svqz;
Begin
new(p);
p^.Element:=a;
If (start=NIL) and (kon=NIL) Then
Begin
p^.pred:=NIL;
p^.sled:=NIL;
start:=p;
End
Else
Begin
p^.sled:=NIL;
p^.pred:=kon;
kon^.sled:=p;
End;
kon:=p;
End;
procedure Vyvod_Forward(p:svqz);
var
UkZv:svqz;
Begin
UkZv:=p^.sled;
if p^.sled=p then
writeln('Koltso pusto')
else
begin
while UkZv<>p do
begin
Write (UkZv^.element, ' ');
ukzv:=ukzv^.sled;
end;
writeln;
end;
End;
procedure vyvod_back(p:svqz);
var
ukzv:svqz;
begin
ukzv:=p^.pred;
if p^.sled=p then
writeln('Koltso pusto')
else begin
while ukzv<>p do
begin
write(ukzv^.element, ' ');
ukzv:=ukzv^.pred;
end;
writeln;
end
End;
//----------------------
{Закольцовывание списка}
Procedure ToRing;
Begin
kon^.sled:=start;
start^.pred:=kon;
End;
//----------------------
{var
a:svqz;}
BEGIN
start:=NIL;
kon:=NIL;
AddToBegin(5);
AddToBegin(9);
AddToBegin(-6);
{AddToBegin(12);}
ToRing;
vyvod_back(p);
readln;
readln;
END.
Для написания использовался Delphi (Console Application).