Народ подскажите процедуру поворота списка, а то я скоро уже с ума сойду.
Например вводим с клавиатуры (признаком окончания ввода является цифра 0): 1 2 3 4 5 ... 0
Нужно получить: 0 ... 5 4 3 2 1
Заранее благодарен!
uses crt;
type tinf=integer;
tp=^node;
node=record
inf:integer;
sled:tp;
end;
var head,pn,pss,p:tp;
procedure init(var head:tp);
begin
head:=nil
end;
procedure vkln(iel:tinf);
begin
new(pn);
pn^.inf:=iel;
pn^.sled:=head;
head:=pn;
end;
procedure ps(ifn:tinf);
begin
new(p);
p^.inf:=ifn;
p^.sled:=head;
head:=pn;
end;
Procedure Print(p: tp);
begin
while p <> nil do begin
write(p^.inf,' ','');
p:=p^.sled;
end;
writeln;
end;
var s:integer;
begin
clrscr;
init(head);
writeln('‚ўҐ¤ЁвҐ зЁб« ®в 1 ¤® 99. Љ®Ґж®¬ ўў®¤ пў«пҐвбп жЁда 0');
repeat
read(s);
vkln(s);
until s=0;
print(pn);
pn^.sled:=head;
while pn <> nil do begin
pn:=pn^.sled;
ps(pn^.inf);
end;
writeln;
print(p);
readkey;
end.
uses crt;Теперь ясно?
type
tinf=integer;
tp=^node;
node=record
inf:integer;
sled:tp;
end;
var
head, tail: tp;
procedure vkln(iel:tinf);
var new_p: tp;
begin
new(new_p);
with new_p^ do begin
inf := iel;
sled := nil;
end;
if tail = nil then head := new_p
else tail^.sled := new_p;
tail := new_p;
end;
procedure Print(p: tp);
begin
while p <> nil do begin
write(p^.inf:4);
p:=p^.sled;
end;
writeln;
end;
procedure reverse(p: tp);
begin
if p <> nil then reverse(p^.sled)
else exit;
vkln(p^.inf);
end;
var
s:integer;
begin
clrscr;
head := nil; tail := nil;
writeln('0 to finish...');
repeat
read(s);
vkln(s);
until s=0;
print(head);
tail := nil;
reverse(head);
print(head);
end.