问题描述
program uka3;
type
itemptr = ^item;
item = record
data: integer;
next: itemptr;
end;
var
first,tmp: itemptr;
n: integer;
begin
first := nil;
while not SeekEof do { Reading numbers }
begin
read(n);
new(tmp);
tmp^.data := n;
tmp^.next := first;
first := tmp;
end;
{ here i need loop that reverse number in right order }
tmp := first;
while tmp <> nil do { Output reversed numbers }
begin
writeln(tmp^.data);
tmp := tmp^.next;
end;
while first <> nil do { Free memory }
begin
tmp := first^.next;
dispose(first);
first := tmp;
end;
end.
该程序读取数字并以相反的顺序输出它们。
在读取它们后如何在循环中反转这些数字,以便它们按写入的顺序排列?
解决方法
下面是一个反转列表的过程。只需使用 ReverseList ( first )调用它即可。
procedure ReverseList(var list: itemptr);
var curr,prev,next: itemptr;
begin
prev := nil;
curr := list;
while curr <> nil do
begin
next := curr^.next;
curr^.next := prev;
prev := curr;
curr := next
end;
list := prev
end