void LinkedList :: reverseL(int val)
{
if (val==0 || head==NULL)
{
return;
}
else
{
Node *temp=NULL;
Node *curr=head;
Node *bef=NULL;
Node *aft=curr->next;
for (int j=0; j<length()-val; j++)
{
temp=curr;
curr=aft;
aft=aft->next;
}
int i=0;
while (curr!=NULL && i<val)
{
curr->next=bef;
bef=curr;
curr=aft;
if (aft==NULL)
{
break;
}
if (aft!=NULL)
{
aft=aft->next;
}
i++;
}
temp->next=bef;
}
}
我只是想弄清楚为什么我在任何val>linkedlist的长度。有人能给我指正确的方向吗?
GDB显示在温度->next=bef;不知道如何解决。。。
正如您在调试时发现的,无效的取消引用发生在temp->next=bef
。
当使用等于列表长度的val
调用reverseL
方法时,将发生此错误。在这种情况下,temp
将保持为NULL
,因此temp->next
是无效访问。在这种情况下,您不希望将bef
指定给temp->next
,而是希望将其分配给head
。
所以在你的代码中替换:
temp->next=bef;
带有:
if (temp == nullptr) {
head = bef;
} else {
temp->next = bef;
}
最后,在C++中,应该使用nullptr
而不是NULL
。