void LinkedList<T>::mergeSort(Node*& curr) {
if(curr->next!=nullptr)//Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)
{
Node* ptr1=nullptr;
Node* ptr2=curr;
//splits linked list
for(int i=0;i<getLength()/2;i++)
{
ptr1=ptr2;
ptr2=ptr2->next;
}
ptr1->next=nullptr;
ptr1=curr;
//recursive call for sorting
mergeSort(ptr1);//Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)
mergeSort(ptr2);
//merge lists back together
if(ptr1==nullptr)
curr=ptr2
else if(ptr2==nullptr)
curr=ptr1
Node* reff=ptr1;
while(reff->next !=nullptr)
{
reff=reff->next;
}
reff->next=ptr2;
curr=reff;
}
}
一切似乎都正常,请期待此功能。我总是会遇到细分错误,但我很困惑为什么会这样。
此外,我正在上大学,所以可能会有一种更有效的方法,但这是我可以做到的方式,而无需提前学习课程。
我有一个叫做length的变量,它保存了长度。这部分是由老师实施的。
所以它给了我这个错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffeef3ffff8)。如何通过code = 2和其他数字找出错误的含义?
for(int i=0;i<getLength()/2;i++)
有概率。许多事情错了。这显示了如何使用std::list
完成。我不知道是否提供了API,但让它成为需要列表的独立函数。