我发布此问题是因为我遇到任何我编写的链表问题的运行时错误。我必须做的是一个普遍的错误。请帮助我找出那是什么错误
这只是这些问题之一: 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;
}
请让我知道这段代码有什么问题。
提前谢谢
答案 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;
}
希望这会有所帮助。
继续提问,保持成长:)