Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;使用递归函数创建链表 我是初学者学习C++ 我正在尝试使用递归函数创建一个链表 我想我得到了或多或少的指针,链表,数据结构等,但我坚持了2天_C++_Recursion_Linked List - Fatal编程技术网

C++;使用递归函数创建链表 我是初学者学习C++ 我正在尝试使用递归函数创建一个链表 我想我得到了或多或少的指针,链表,数据结构等,但我坚持了2天

C++;使用递归函数创建链表 我是初学者学习C++ 我正在尝试使用递归函数创建一个链表 我想我得到了或多或少的指针,链表,数据结构等,但我坚持了2天,c++,recursion,linked-list,C++,Recursion,Linked List,这是我的全部代码 我基本上是想做的,就像我说的,只使用递归函数创建一个链表。 问题是我的指针变量“head”总是指向NULL,我不知道为什么,我想我误解了很多东西,但我不知道是什么。。。我越是尝试,我就越感到困惑 这一定是个新手问题,但如果有人能帮我,我真的很感激 #include <iostream> using namespace std; struct linkedlist { int value; linkedlist *next; }; void in

这是我的全部代码

我基本上是想做的,就像我说的,只使用递归函数创建一个链表。 问题是我的指针变量“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();
}
#包括
使用名称空间std;
结构链接列表
{
int值;
linkedlist*下一步;
};
void insertNode(linkedlist*temp)
{
如果(临时->下一步!=NULL)
{
插入节点(临时->下一步);
}
其他的
{
临时->下一步=新建链接列表;
温度->下一步->值=0;
临时->下一步->下一步=空;
}
}
linkedlist*addNode(linkedlist*temp)
{ 
if(temp==NULL)
{
linkedlist*newelement=新建linkedlist;
新元素->值=0;
newelement->next=NULL;
temp=新元素;
返回新元素;
}
其他的
{
插入节点(temp);
}
}
无效显示列表(linkedlist*temp)
{
while(temp!=NULL)
{
其次是价值观;
}
}
int main()
{
linkedlist*head=NULL;
linkedlist*element1=addNode(头);
linkedlist*element2=addNode(头);
linkedlist*element3=addNode(头);
linkedlist*element4=addNode(head);
linkedlist*element5=addNode(头);
cin.ignore();
cin.get();
}

您正试图修改传入到
addNode
的指针,但指针是按值传递的,因此在调用站点上看不到修改

要解决此问题,请通过引用获取指针:

linkedlist *addNode(linkedlist*& temp)

您正试图修改传入到
addNode
的指针,但指针是按值传递的,因此在调用站点上看不到修改

要解决此问题,请通过引用获取指针:

linkedlist *addNode(linkedlist*& temp)

你的代码没有什么意义。例如,函数
addNode
应该为添加到列表中的值设置一个参数。此外,不需要有两个函数
addNode
insertNode
,因为它们的作用相同(至少在函数的实现中是如此)。如果您想拥有一些函数
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 );
}

你的代码没有什么意义。例如,函数
addNode
应该为添加到列表中的值设置一个参数。此外,不需要有两个函数
addNode
insertNode
,因为它们的作用相同(至少在函数的实现中是如此)。如果您想拥有一些函数
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 );
}

您得到的错误是什么?请记住,递归将对列表造成严格的大小限制。如果列表中的元素太多,则会出现StackOverflowException。考虑避免递归。你得到的错误是什么?请记住,递归会对列表造成严格的大小限制。如果列表中的元素太多,则会出现StackOverflowException。考虑避免递归。这正是我错过的,实际上我找不到任何地方…我现在是超级初学者,但我希望有一天我能像你一样编程!这对我帮助很大,非常感谢。通过引用,我最终会有一个关于这个指针的问题。它完美地解决了我的问题,我发现如果我在其他函数上再次使用这个'head'变量来打印我的列表,它会很好地工作。我的问题是这个变量怎么可能指向列表的起始元素,因为我并没有看到任何代码使它指向它。。。瞧,另一个非常新的问题(我想进入,以创造空间,它刚刚进入我的评论)我的意思是,这很酷,一切都很完美,但我想知道它是如何指向起始元素的。毕竟,我被困在这一章中,因为至少3天,实际上你不知道你帮了我多少忙!谢谢^^ ^!它指向列表的开头,因为对
addNode
的第一次调用将节点分配到
head
,然后随后的调用将节点附加到该节点的末尾。这正是我所缺少的,实际上我在任何地方都找不到的。。。我现在是超级初学者,但我希望有一天我能像你一样编程!这对我帮助很大,非常感谢。通过引用,我最终会有一个关于这个指针的问题。它完美地解决了我的问题,我发现如果我在其他函数上再次使用这个'head'变量来打印我的列表,它会很好地工作。我的问题是这个变量怎么可能指向列表的起始元素,因为我并没有看到任何代码使它指向它。。。瞧,另一个非常新的问题(我想进入,以创造空间,它刚刚进入我的评论)我的意思是,这很酷,一切都在完美地工作,但我想知道它是如何指向起始元素的。毕竟,我被困在这一章中,因为至少3天,实际上你不知道你有多少