我正在尝试编写一个函数,该函数接受指向头节点的指针,然后反转节点使用递归相互链接的方式。
以下是我的功能。
void reverseRec(digits *&head){
digits *temp = head;
if(temp->next = NULL){
head = temp;
return;
}
reverseRec(head->next);
digits * a = temp->next;
a->next = temp;
temp->next = NULL;
}
并且函数调用如下:
int main(){
digits * head = new digits(); // pointer that points to head of the node
head = NULL;
insert(head, 5, 1);
insert(head, 6, 2);
insert(head, 1, 3);
insert(head, 7, 1);
delList(head, 1);
reverseRec(head);
}
如果有帮助,我尝试使用一个正常的反向函数使用while循环,它变得很好,我的代码是这样的:
void reverse(digits *&head){
digits * prev, * current, * next;
current = head;
prev = NULL;
while(current!= NULL){
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
}
我是C ++的新手,我得到了很多“访问违规写入位置”错误,直到现在我还不知道它是什么(我通常会修改代码,直到它被修复,但我从来没有真的明白是什么原因造成的)。
抱歉,这真的是一个新手问题,这些访问违规写入位置错误是什么?我的代码出了什么问题?答案 0 :(得分:1)
当您尝试写入或读取未授权给您的程序的内存区域时,会发生访问冲突错误。您能否提一下您在哪里获得此访问冲突错误?
在IF()
条件下,您实际上是等式Temp->在NULL旁边。你可以尝试改变..
if(temp->next = NULL)
到
if(!temp->next)
在主()中,改变你的头部作业。
head ->next= NULL;