我发布这个问题是因为我编写的任何链表问题都会出现运行时错误。我一定犯了一个一般性的错误。请帮我找出的错误是什么
这只是其中一个问题: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;
}
请告诉我这个代码出了什么问题。
提前感谢
所以,您正在尝试使用链表,这很好。
链表就像一个游戏,一个"指针游戏"。你似乎在"逻辑游戏"中表现得很好,而在"指针游戏"中却缺少一些东西。
通过你提到的语句-"我正在为我编码的任何链表问题获取运行时错误。",我建议你学习如何调试代码以及如何进行代码的自检。
回到您的代码,您正在遍历整个列表以访问最后一个节点。为了实现这个目标,您使用了while循环。但是,看看您在其中使用了什么条件语句,以及执行while循环后会留下什么。
node *last=start,*nxt,*i=start;
int n=1;;
while(last!=NULL){
last=last->next;
n+=1;
}
首先,请尝试检查您的代码是否只包含大小为2或3的链表。
您的代码不是将n的值给定为[size(of linked list(+1],然后剩下最后一个指针指向NULL吗。那么,当last为NULL时,如何获取last->data呢。
只是简单的指针处理不当。否则,后面代码部分的逻辑就可以了。
需要修改
最后一个节点是下一个指向NULL的节点。所以只运行循环到那个节点。
int n=1;;
while(last->next!=NULL){ //last->next instead of last
last=last->next;
n+=1;
}
希望这会有所帮助。
不断询问,不断增长:(