我知道这个问题已经发布在论坛中,但是我有一个小问题,我试图解决,但我没有成功
当我尝试这段代码甚至代码贴出stackoverflow其他线程时,我总是想出一个违规访问错误我试过这段代码
void reverse(node **headRef)
{
node *current = *headRef, *next,*result=NULL;
while(current)
{
next = current->next;
current->next = result;
result =current;
current = next;
}
*headRef = result;
}
在eclipse cpp,visual studio和代码块中它总是以违规访问结束,当我试图逐步调试人员时,我发现我很奇怪光标进入while循环,即使当前为NULL,甚至当我试图通过current->替换当前的电流,然后光标仍然进入循环调度,即current-> next已经为NULL
while(current->next)
{
next = current->next;
current->next = result;
result =current;
current = next;
}
我试图反复做同样的工作人员以避免循环,但问题仍然存在
void recursiveReverse(node **headRef) {
node *first = *headRef;
node *rest = first->next;
if(rest ==NULL) return;
recursiveReverse(&rest);
first->next->next = first;
first->next = NULL;
*headRef = rest;
}
以下是visual studio的错误:
答案 0 :(得分:1)
我已经稍微更改了代码以解决错误并且还将节点发回。希望这会有所帮助。 GCC编译器没有显示任何访问冲突。
#include <stdio.h>
typedef struct Node {
char data;
struct Node* next;
} Node;
void print_list(Node* root) {
while (root) {
printf("%c ", root->data);
root = root->next;
}
printf("\n");
}
Node* reverse(Node **root) {
Node *current = *root, *next,*result=NULL;
while(current){
next = current->next;
current->next = result;
result =current;
current = next;
}
return result;
}
int main() {
Node d = { 'd', 0 };
Node c = { 'c', &d };
Node b = { 'b', &c };
Node a = { 'a', &b };
Node* root = &a;
print_list(root);
root = reverse(&root);
print_list(root);
return 0;
}
输出:
a b c d
d c b a