Pointer30. Дан указатель $$P_1$$ на начало непустой цепочки элементов-записей типа TNode, связанных между собой с помощью поля Next. Используя поле Prev записи TNode, преобразовать исходную (односвязную) цепочку в двусвязную, в которой каждый элемент связан не только с последующим элементом (с помощью поля Next), но и с предыдущим (с помощью поля Prev). Поле Prev первого элемента положить равным $$nil$$. Вывести указатель на последний элемент преобразованной цепочки.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
program Pointer30; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; Prev: PNode; end; procedure CreateStack(var P1:PNode); var p,q:PNode; i,N:integer; begin Write('N:'); Readln(N); New(P1); Write('data: '); Readln(P1^.Data); P1^.Next := nil; q:=P1; for i:=1 to N-1 do begin new(p); Write('data: '); Readln(P^.Data); p^.Next := nil; q^.Next := p; q:=q^.Next end; end; var P1,p,q:PNode; a:^Word; begin CreateStack(P1); p:=P1; p.Prev:=nil; while (p.Next<>nil) do begin q:=p; p:=p.Next; p.Prev:=Q; end; a:=Addr(P); Writeln('end: ',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Комментарии:
Комментарии 1