我正在递归地编写一个插入函数,用于向列表中添加元素。问题是当我运行程序并尝试插入时,它只插入一次,然后在第二次中断并出现错误。 任何建议,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);
}
}
答案 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);
}
}
这应该可行。