反转链表的最后K个元素-C++


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

相关内容

  • 没有找到相关文章

最新更新