插入已排序的链表segfaults

时间:2015-11-06 20:29:36

标签: c++ linked-list

它看起来像在" SortedInsert",头部始终为零,然后代码段错误无论如何......真的很令人沮丧。任何想法为什么头部总是为零,即使我把它设置为某种东西,然后为什么代码段错误一般? 感谢

$('.close').click(function() {
    var destination = $(this).data("link");
 $("body").fadeOut(1000,function(){
       window.location.replace(destination);
    });
});

2 个答案:

答案 0 :(得分:0)

SortedInsert有自己的头指针副本。当您在函数内部更改头部时,它不会影响main中的值。解决方案是通过引用传递或传递地址。

void SortedInsert(Node** head, int value) {
    //Use *head to refer to the head of the list
}
int main() {
    ...
    Node* sortedList = 0;
    SortedInsert(&sortedList, ...);
    ...
}

或者

void SortedInsert(Node*& head, int value) {
    //Use head to refer to the head of the list
}
int main() {
    ...
    Node* sortedList = 0;
    SortedInsert(sortedList, ...);
    ...
}

答案 1 :(得分:0)

尝试以下

void SortedInsert( Node* &head, int value )
{
    if ( head == nullptr || value < head->data )
    {
        head = new Node { head, value };
    }
    else
    {
        Node *current = head;

        while ( current->next != nullptr && !( value < current->next->data ) )
        {
            current = current->next;
        }

        Node *tmp = new Node { current->next, value };
        current->next = tmp;
    }
}

至于你的funcion实现,那么该函数处理头部的副本。副本的任何更改都不会影响参数本身。你应该通过引用传递头部或从函数返回头部。