用一个参数计算循环链表中的节点数?

时间:2019-05-12 21:08:17

标签: c++ circular-list

因此,我必须递归计算循环链接列表中的节点。我有一个要求使用的标题:

int Recursive(node *head);

是否可以仅使用一个指针来计数此列表中的节点?算法将是什么呢?

2 个答案:

答案 0 :(得分:2)

       int count(node* head)
       {
          if(head == nullptr)
            return 0;
         return countRecursive(head, head->next);
       }

       int countRecursive(node* head, node* current)
       {
          if(current == head) // our end condition!
             return 1;
         return 1 + countRecursive(head, current->next);
       }

       Basically we go in a circle and stop when we return to the head, adding 1 while 
       we go.

答案 1 :(得分:0)

您可以分离一个节点以使其成为一个较小的列表,递归计算该列表中的节点,然后重新附加其他节点。在这里,您去了:

int count(Node* head) {
  // Base cases: (empty list and 1 node)
  if (!head) return 0;
  if (head->next == head) return 1;
  // Keep a pointer to the node to be removed
  Node* temp = head->next;
  // Remove the node
  head->next = temp->next;
  // Get the length of the new list
  int result = 1 + count(head);
  // Reconnect the node
  head->next = temp;
  return result;
}