Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
460 views
in Technique[技术] by (71.8m points)

recursion - Recursive base case for c++ circular linked list

This is all hypothetical,

I have a struct as so:

struct node
{
    int     data;
    node*   next;
};

and a circular linked list with only a head pointer, how would I set up a base case for a recursive function that counts the nodes of the circular list? I don't even know where to begin because everything I brainstorm, I quickly realize wouldn't work, because the last node in the list points right back to head instead of NULL.

Example function:

int count(node *head)
{
   int listCount = 0;

   if(base case)
   {
     then return 0;
   }
   else
   {
     calculate listCount
     count(head->next);
   }

   return listCount
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you can make the ciruclar linked list into a linear linked list

int wrapper_function(node*head)
{
    node*current = head;
    head  = head -> next;
    current -> next = NULL;
    count(head);
    current -> next = head;
    head = current;
    return 0;
}


int count(node *head)
{
   int count = 0;

   if(!head)
   {
   then return 0;
   }
   else
  {
   calculate count
   count(head->next);
  }

   return;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...