我正在尝试用C编写一个LinkedList。这是我的两个结构
struct node{
int key;
int value;
struct node *next;
};
struct LinkedList {
struct node *head;
};
以下是我创建新节点的方法。
void createNode(int key, int value) {
struct node *new_node;
new_node->key = key;
new_node->value = value;
new_node->next = lList->head;
lList->head = new_node;
}
我正在尝试使用下面的函数遍历LinkedList。
void traverseNode(struct LinkedList *lList) {
struct node current = *lList->head;
while(current != NULL) {
printf("%i", current->key);
current = current->next;
}
}
但是,我一直收到错误
invalid operands to binary expression ('struct node'
and 'void *')
与我的while
表达式有关。
另外,我收到
的错误printf("%i", current->key);
current = current->next
错误是
成员引用类型&#39; struct node&#39;不是指针; 也许你打算使用&#39; <#39;
我很困惑,因为我认为在我的节点结构中,*next
被定义为指针,因此只能使用间接( - &gt;)语法进行访问。
我是指针的初学者,所以任何帮助都表示赞赏。
答案 0 :(得分:2)
您无法将NULL
与非指针类型进行比较。
将变量current
声明为指针+删除head
的解除引用并编译
struct node * current = lList->head;
^ ^
while(current != NULL) // Now you can compare them
您正在获取SEGFAULT,因为您正在取消引用未初始化的指针。在堆上分配足够的内存(动态存储持续时间)。
struct node *new_node = malloc(sizeof(struct node));
由于current
是指针
printf("%i", current->key);
current = current->next;
现在应该没事。
答案 1 :(得分:2)
由于错误状态current是结构,而不是指针
将其更改为struct node *current = lList -> head;
请记住,指针本身没有引用对象的存储空间
答案 2 :(得分:1)
do{
printf("%i", current->key);
current = current->next;
} while(current != NULL)
执行此操作将通过查看下一个节点是否为空而不是整个结构来检查您是否在最后一个节点上
答案 3 :(得分:0)
void createNode(int key, int value) {
struct node *new_node; // you need to malloc here
new_node->key = key;
new_node->value = value;
new_node->next = lList->head;
lList->head = new_node;
}
在访问指针之前必须使用malloc。
struct node *new_node = (struct node*)malloc(sizeof(struct node));
同样改变,
struct node current = *lList->head;
成,
struct node *current = *lList->head;