program list; type PElement = ^Element; Element = record data: integer; prev: PElement; next: PElement; end; procedure list_create(var head: PElement; data: integer); begin new(head); head^.data := data; head^.next := head; head^.prev := head; end; procedure list_appbeg(var head: PElement; data: integer); var p: PElement; begin new(p); p^.data := data; head^.prev^.next := p; p^.prev := head^.prev; head^.prev := p; p^.next := head; head := p; end; procedure list_print(head: PElement); var p: PElement; begin p := head; repeat writeln(p^.data); p := p^.next; until p = head; end; procedure search_middle(var head: PElement; var i:integer); var p: PElement; begin p := head^.next; i := 1; while p <> head do begin p := p^.next; i := i+1; end; i := i div 2; end; procedure add_in_middle(var head:PElement; i:integer); var p, k: PElement; poz: integer; begin p:= head; for poz:=1 to i do p := p^.next; new(k); writeln('Input data of new element:'); read(k^.data); p^.next^.prev := k; k := p^.next; k^.prev:=p; p^.next := k; end; var head: PElement; p: PElement; data: integer; i, num: integer; action: integer; begin write('Enter data of first element: '); read(data); list_create(head, data); writeln('Input number of element, which You want to add: '); read(num); writeln('Input data: '); for i:=1 to num do begin read(data); list_appbeg(head, data); end; writeln('Print result: '); list_print(head); search_middle(head, i); add_in_middle(head, i); list_print(head); end.