链表插入函数递归c ++

时间:2013-05-19 06:54:11

标签: c++

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

辅助功能:

 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);
        }   

    }

3 个答案:

答案 0 :(得分:1)

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

list->next->next = NULL;

在insertHelper的else部分。至于“建议”部分,如果可以帮助它,请避免递归处理列表。你(未来)的同事不会欣赏它。

答案 1 :(得分:1)

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.. 
            }

        }

答案 2 :(得分:1)

每次插入新节点时,都必须将该新节点的下一个值设置为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);
        }   

    }

这应该可行。