我尝试使用链接列表进行插入排序,但此代码似乎有运行时错误。
void Insert(int data)
{
node* temp=new node();
temp->data=data;
temp->link=NULL;
if(head==NULL)
{
head=temp;
return;
}
node* current=head;
if(current->data>data)
{
temp->link=head;
head=temp;
return;
}
else
{
current=head;
node* trail=head;
while(current->data<=data)
{
trail=current;
current=current->link;
}
trail->link=temp;
temp->link=current;
}
}
答案 0 :(得分:1)
您的问题出在第二个if的else块中。
您正在循环浏览列表,一切似乎都很好......但如果您到达列表的末尾并且current->data
仍然小于或等于data
会发生什么? ??哦哦! current = current->link
,当前为NULL
,因此下一个current->data
将尝试取消引用空指针!
只需在循环条件中添加一个检查,一切都将是桃子色的:
while(current && current->data <= data) {
如果current
是空指针,此表达式现在会短路,从而避免出现此问题。
答案 1 :(得分:0)
不确定这是否是唯一的错误,但是:
current=head;
node* trail=head;
while(current->data<=data) // <-- This doesn't check if current->link is NULL
{
trail=current;
current=current->link; /// <-- If current is NULL this would explode
}
trail->link=temp;
temp->link=current;