我'm writing a program using single linked list. I' m从链表的末尾添加元素,为此我需要进行空检查 . 但在我尝试检查元素是否为NULL或nullptr后,我得到错误 . !*head
检查方法有问题吗? P.S还想听听是否有更好的方法在链表中创建/插入新节点 .
#include <iostream>
typedef struct vertex vertex;
typedef struct edge edge;
typedef struct vertex {
int vertex;
struct vertex * next;
edge ** head;
}vertex;
typedef struct edge {
int vertex1, vertex2;
struct edge * next;
}edge;
void add_vertex(vertex ** head, int vertex_value) {
vertex * new_vertex = new(vertex);
new_vertex->vertex = vertex_value;
if (!*head) {
new_vertex->next = NULL;
*head = new_vertex;
return;
}
vertex * tracer = *head;
while (tracer->next != NULL) {
tracer = tracer->next;
}
tracer->next = new_vertex;
new_vertex->next = NULL;
}
int main() {
vertex ** head = nullptr;
add_vertex(head, 1);
}
我在 if(!*head)
时刻的add_vertex函数中得到了读取访问冲突错误 .
2 回答
您正试图取消引用
head
,这是自我NULL . 这在C中是非法的 .构建
add_vertex
函数的方式,必须永远不要将其作为head
发送给NULL参数 . 在main
中分配head
,该问题将得到解决 .主要的
这可以解决您的问题,但最好通过引用传递 .