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

        }

当我调用递归函数时这个函数:

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

    }
4

3 回答 3

1

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

list->next->next = NULL;

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

于 2013-05-19T07:04:36.903 回答
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.. 
            }

        }
于 2013-05-19T07:05:25.150 回答
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);
        }   

    }

这应该有希望工作。

于 2013-05-19T07:23:41.827 回答