C 中的链接列表错误



我正在尝试用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;
}

我正在尝试使用以下函数遍历链接列表。

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

错误是

成员引用类型"结构节点"不是指针; 也许你的意思是使用".">

我很困惑,因为我认为在我的节点结构中,*next被定义为指针,因此只能使用间接(->(语法访问。

我是指针的初学者,因此任何帮助都值得赞赏。

您无法将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;

现在应该没事了。

由于错误状态,电流是一个结构,而不是指针

将其更改为struct node *current = lList -> head;

请记住,指针本身没有引用对象的存储

do{
printf("%i", current->key);
current = current->next;
} while(current != NULL)

这样做将通过查看下一个节点是否为 null 而不是整个结构来检查您是否在最后一个节点上

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;

相关内容

  • 没有找到相关文章

最新更新