获取“旋转双向链接列表”的运行时错误

时间:2018-07-23 06:36:12

标签: linked-list runtime-error

我发布此问题是因为我遇到任何我编写的链表问题的运行时错误。我必须做的是一个普遍的错误。请帮助我找出那是什么错误

这只是这些问题之一: https://practice.geeksforgeeks.org/problems/rotate-doubly-linked-list-by-p-nodes/1

这是我的解决方案:(我只应该完成功能)

struct node*update(struct node* start,int p)

{
//Add your code here
node *last=start,*nxt,*i=start;
int n=1;;
while(last!=NULL){
    last=last->next;
    n+=1;
}
cout<<last->data<<"\n";
p=p%n;
for(int i=0;i<p;i++){
    nxt=start->next;
    last->next=start;
    start->next=NULL;
    start->prev=last;
    nxt->prev=NULL;
    last=last->next;
    start=nxt;
}
return start;

}


请让我知道这段代码有什么问题。

提前谢谢

1 个答案:

答案 0 :(得分:2)

所以,您正在尝试使用链表,这很棒。

链接列表就像一个游戏,一个“指针游戏”。您似乎在“逻辑游戏”中表现出色,而在“指针游戏”中却缺少一些东西。

通过您提到的语句“我正在编写的任何链表问题,我都遇到运行时错误。”,我建议您学习如何调试代码以及​​如何进行代码自测。 >

回到您的代码,您正在遍历整个列表以访问最后一个节点。为了实现该目标,您使用了while循环。但是,看看在其中使用了什么条件语句,以及执行while循环后将剩下什么。

node *last=start,*nxt,*i=start;
int n=1;;
while(last!=NULL){
    last=last->next;
    n+=1;
}

首先,尝试检查您的代码是否仅包含大小为2或3的链表。

您的代码不是将n的值指定为[size(链表的+1)],并且剩下 last 指针 pointing 指向 NULL 。那么当last为NULL时如何获取last-> data。

只是简单的指针处理不当。否则,您后面的代码部分的逻辑就可以了。

需要修改

最后一个节点是第一个,其下一个指向NULL 。因此,将循环运行到仅该节点为止。

int n=1;;
while(last->next!=NULL){ //last->next instead of last
    last=last->next;
    n+=1;
}

希望这会有所帮助。

继续提问,保持成长:)

相关问题