插入排序

时间:2015-06-30 22:16:51

标签: c++ runtime-error insertion-sort

我尝试使用链接列表进行插入排序,但此代码似乎有运行时错误。

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

2 个答案:

答案 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;