链表递归插入函数

linked list insert function recursively c++

本文关键字:函数 插入 递归 链表      更新时间:2023-10-16

我正在递归地编写插入函数,用于向列表添加元素。问题是,当我运行程序并尝试插入时,它只插入一次,然后在第二次它中断并有一个错误。有什么建议,谢谢

辅助功能:

 void List::insertHelper(Node* list, int number)
        {
            if(list->next != NULL)
            {
                insertHelper(list->next, number);
            }
            else
            {
                list->next = new Node;
                list->next->data = number;
            }
        }
当我调用递归函数时

这个函数:

void List::insert( int d)
    { 
        if( head == NULL)
        {
            head = new Node;
            head->data = d;
        }
        else
        {
        insertHelper(head, d);
        }   
    }

您的问题是缺少以下内容:

list->next->next = NULL;

在insertHelper的else部分。至于"建议"部分,尽可能避免递归地处理列表。你的(未来的)同事不会喜欢的。

void List::insertHelper(Node* list, int number)
        {
            if(list->next != NULL)
            {
                insertHelper(list->next, number);
            }
            else
            {
                list->next = new Node;
                list->next->data = number;
                list->next->next=NULL; // You are missing this line.... becuase of this.. new nodes next remains as dangling pointer instead of null.. 
            }
        }

每次插入新节点时,必须将该新节点的下一个值设置为NULL。否则,每次调用insertHelper时都会得到一些垃圾指针值。

这是修改后的代码。

void List::insertHelper(Node* list, int number)
    {
        if(list->next != NULL)
        {
            insertHelper(list->next, number);
        }
        else
        {
            list->next = new Node;
            list->next->data = number;
            list->next->next = NULL; //MODIFIED LINE
        }
    }
void List::insert( int d)
    { 
        if( head == NULL)
        {
            head = new Node;
            head->data = d;
            head->next = NULL; //MODIFIED LINE
        }
        else
        {
            insertHelper(head, d);
        }   
    }