Брой елементи в кръгов списък

  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. struct Node
  6. {
  7.     int item;
  8.     Node *next;
  9. };
  10.  
  11. unsigned int size(Node *list);
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.     srand(time(0));
  16.     int N = rand()%20 + 1;
  17.  
  18.     Node *t = new Node;
  19.     t->item = 1;
  20.     t->next = t;
  21.  
  22.     Node *x = t;
  23.     for(int i=2; i<=N; i++)
  24.     {
  25.         x = x->next = new Node;
  26.         x->item = i;
  27.         x->next = t;
  28.     }
  29.  
  30.     std::cout << N << " " << size(t) << std::endl;
  31.  
  32.     return 0;
  33. }
  34.  
  35. //определя броя на елементите в кръговия списък
  36. unsigned int size(Node *list)
  37. {
  38.     if(list == NULL)
  39.         return 0;
  40.  
  41.     unsigned int count = 1;
  42.     Node *nodeWalk = list;   
  43.     while(nodeWalk->next != list)
  44.     {
  45.         ++count;
  46.         nodeWalk = nodeWalk->next;
  47.     }
  48.  
  49.     return count;
  50. }