我在解决以下功能中的错误时遇到问题。该函数的目的是按升序将数字插入链表中。
当列表为空/插入第一个节点时,此函数正常工作,但在尝试插入节点后,我收到错误Process returned -1073741819 <0xC0000005>
。
Node *orderedInsert(Node *p, int newval)
{
Node* q = (Node*)malloc(sizeof(Node));
q->data = newval;
if(p == NULL || newval <= p->data)
{
q->next = p;
return q;
}
else
{
Node* tmp = p;
while(tmp != NULL && tmp->data <= newval)
{
tmp = tmp->next;
}
q->next = tmp->next;
tmp->next = q;
return p;
}
}
我意识到0xC0000005错误代表访问冲突;在尝试调试时,我注意到访问tmp->next
不会给我任何预期的结果:我猜我的tmp
节点已经关闭,我只是不知道该怎么做以及如何解决它。
任何人都可以帮我理解我做错了吗?
答案 0 :(得分:1)
问题是您要插入一个过去需要插入的位置。这意味着如果您插入的节点具有最大值,您将到达tmp
为NULL的末尾,然后您将尝试将tmp->next
设置为q
。您可能希望使用prev
指针作为tmp
后面的一个元素,因此您可以在prev
处插入。