C ++使用递归函数创建链表

时间:2015-07-01 07:51:38

标签: c++ recursion linked-list

您好我是初学者学习c ++ 我正在尝试使用递归函数创建链接列表 我虽然有或多或少的指针,链表,数据结构等,但我被困了2天。

这是我的整个代码。

我基本上想要做的就像我说只使用递归函数创建一个链表。 问题是我的指针变量' head'总是指向NULL,我无法弄清楚为什么,我想我误解了很多东西,但我根本不知道是什么......而且我尝试的更多,我感到困惑。

这一定是一个很新手的问题,但如果有人可以帮助我,我真的很感激。

#include <iostream>

using namespace std;

struct linkedlist
{
    int value;
    linkedlist *next;
};

void insertNode(linkedlist* temp)
{
    if (temp->next != NULL)
    {
        insertNode(temp->next);
    }
    else
    {
        temp->next = new linkedlist;
        temp->next->value = 0;
        temp->next->next = NULL;
    }

}


linkedlist *addNode(linkedlist *temp)
{ 
    if (temp == NULL)
    {
        linkedlist *newelement = new linkedlist;
        newelement->value = 0;
        newelement->next = NULL;
        temp = newelement;

        return newelement;
    }
    else
    {
        insertNode(temp);
    }
}

void displaylist(linkedlist *temp)
{
    while (temp != NULL)
    {
        cout << temp->value << endl;
        temp = temp->next;
    }
}

int main()
{
    linkedlist *head = NULL;

    linkedlist *element1 = addNode(head);
    linkedlist *element2 = addNode(head);
    linkedlist *element3 = addNode(head);
    linkedlist *element4 = addNode(head);
    linkedlist *element5 = addNode(head);

    cin.ignore();
    cin.get();
}

2 个答案:

答案 0 :(得分:3)

您正在尝试修改传递给addNode的指针,但指针是按值传递的,因此您不会在调用站点看到修改。

要解决此问题,请通过引用接收指针:

linkedlist *addNode(linkedlist*& temp)

答案 1 :(得分:1)

您的代码没有多大意义。例如,函数addNode应该具有添加到列表中的值的参数。此外,不需要有两个函数addNodeinsertNode,因为它们执行相同的操作(至少在函数的实现中)。如果你想要一些函数insertNode,那么它应该有不同的语义。

这是一个演示程序,显示如何编写函数addNode。您可以将其用作程序的模板。在这个演示程序中,函数displayList也是递归的。当然,您还需要编写将删除所有节点的功能。它也可以是递归的。

#include <iostream>

struct linkedlist
{
    int value;
    linkedlist *next;
};

linkedlist * addNode( linkedlist *head, int value )
{
    return head == nullptr 
           ? ( new linkedlist { value, nullptr } )
           : ( head->next = addNode( head->next, value ), head );
}

void displayList( linkedlist *head )
{
    if ( head == nullptr )
    {
        std::cout << std::endl;
    }
    else
    {
        std::cout << head->value << ' ';
        displayList( head->next );
    }
}

int main()
{
    linkedlist *head = nullptr;

    for ( int x : { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ) head = addNode( head, x );
    displayList( head );
}

程序输出

0 1 2 3 4 5 6 7 8 9