0

祝大家新年快乐!:)

我可以在今年的第一天做更好的事情,但我正在尝试一起实现链接列表和递归。

我只是想如何编写一个函数,用递归计算链表中的偶数。

void List:: findingEvens(Node* n, Node*& newHead){
    if(n  == NULL)
        return;
    else
        if(n-> data % 2 != 0)
            findingEvens(n-> next);
    else{
        if(!newHead){
            newHead = n;
        }
        else{
             Node* temp =head;
             for(;temp->next;temp=temp->next){
                temp = temp -> next;
              }
             temp-> next = n;
             findingEvents(n-> next);
        }
    }  
}

问题是在我的 h 类中,我应该添加以下内容

void findingEvens(Node* n);

但是,这让我出错,说错误:'Node' has not been declared 实际上,在 h 类中定义此函数之后,我有一个 Node 结构。

递归函数的实现有错吗?任何帮助将不胜感激,再次新年快乐:)

4

1 回答 1

0
void List:: findingEvens(Node* n, Node*& newHead){
    if(n  == NULL)
        return;
    else
        if(n-> data % 2 != 0)
            findingEvens(n-> next, newHead);
    else{
        // Push even node onto newHead list
        newNode = new Node;
        newNode->data = n->data;
        newNode->next = newHead;
        newHead = newNode;
        findingEvens(n-> next, newHead);
    }
}

您需要传入newHead递归调用。

您不能直接分配nnewHead,因为这样newHead列表将包含原始列表中的所有链接。您需要创建新节点并复制数据。

上面的代码以与原始列表相反的顺序构建结果列表,例如,如果您以 开头1, 2, 3, 5, 6, 8, 9,则结果将为8, 6, 2。完成后,您可以反转列表。

于 2013-01-01T14:08:16.687 回答