如何在C++中调用递归链表遍历函数



我有这个函数:

    void TraverseRecursive ( Node * head, void (*visit) (Node *) )
    {
      if ( head != nullptr )
      {
        visit( head ) ;
        TraverseRecursive( head->next, visit ) ;
      }
    }

我试着用在main.cpp中调用它

TraverseRecursive ( head, TraverseRecursive ) ;

这给了我错误"类型为"void(*((节点*头,void(*visit((节点("的参数"与类型为"void(((节点*("的参数不兼容

那么我该如何正确地称呼它呢?我只是在学习链表,显然不明白是什么

 void (*visit) (Node *)

意味着一切。

第二个参数应该是为列表中的每个节点回调的函数。它只需要一个参数(要"访问"的节点(。

void visitor(Node *node)
{
  printf("%sn", node->data);  // Or whatever
}
TraverseRecursive( head, visitor ) ;

旁注:递归的使用真是浪费。如果幸运的话,编译器会对它进行优化。你应该使用

void TraverseRecursive( Node * head, void (*visit) (Node *) )
{
  for (; head != nullptr; head = head->next)
  {
    visit( head ) ;
  }
}
void (*visit) (Node *)

意思是"指向一个函数的指针,该函数接受Node*类型的一个参数并返回void"。但是TraverseRecurive采用两个自变量,因此类型不同。你需要定义一个类似的函数

void doSomething(Node* n)
{
}

并将其传递给TraverseRecursive

最新更新