Użytkownik: reason
Tytuł: lista_cykl
Język: Pascal
Data: 8 lut 2010, 22:33
Kody powiązane:
Ocena:
// Lista zakończona cyklem, zwraca ilosc elementów w cyklu program wska4; uses crt; type pnode = ^node; node = record val : integer; next : pnode; end; procedure dodaj(var head : pnode; a : integer); // tworzenie listy var p, tmp : pnode; begin p := head; if (p <> nil) then while (p^.next <> nil) do p := p^.next; // przeskakuje p na ostatni element new(tmp); // tworze nowy element tmp^.val := a; tmp^.next := nil; if (head = nil) then head := tmp else p^.next := tmp; end; function cykl(p : pnode) : integer; // fcja zwraca ile jest elementow w cyklu var count : integer; w : pnode; begin w := p; repeat // jeden idzie co jeden element, drugi co dwa; jak sie spotkaja znaczy, ze sa w cyklu p := p^.next; w := w^.next^.next; until p^.val = w^.val; count := 0; repeat // licze dlugosc cyklu p:=p^.next; inc(count); until p^.val = w^.val; cykl := count; end; var head, q : pnode; i : integer; begin clrscr; randomize; head := nil; for i := 1 to 50 do dodaj(head,i); q := head; while (q^.next <> nil) do q := q^.next; // q wskazuje na ost. element ciagu q^.next := head^.next^.next^.next^.next^.next^.next^.next^.next^.next; // ciag zostaje zapetlony writeln(cykl(head)); end.



