Chủ Nhật, 3 tháng 3, 2013

Đảo ngược danh sách



procedure dao_danh_sach ( var L: DS );
var L1, p , q: DS;
begin
{Buoc 1: kiem tra cac dieu kien truoc khi dao ds}
{neu L la ds rong thi ket thuc thu tuc vi khong hop le}
if L=nil then exit;
{neu ds L chi co duy nhat 1 nut thi ket thuc thu tuc vi khong the dao nguoc duoc 1 nut}
if L^.link = nil then exit;
{buoc 2: tien hanh dao nguoc ds L}
{neu L chi co 2 nut thi qua don gian}
L1:= L^.link;
if L1^.link=nil then
begin
L1^.link:= L;
L^.link:= nil;
L:= L1;
exit; {da dao xong va ket thuc thu tuc}
end;
{den day chac chan ds L co nhieu hon 2 nut, giai thuat nhu sau}
p:= L1^.link;
q:= L;
L^.link:= nil;
while p<>nil do
begin
L1^.link:= q; {nut L1 tro den nut q dung truoc no, tuc la tro theo chieu nguoc lai}
q:= L1;
L1:= p;
p:=p^.link;
end; 
L1^.link:= q;
L:=L1;
end;

Không có nhận xét nào: