结构之间的多个箭头运算符
Multiple arrow operators between structs
我正在尝试创建双向链表,其中包含在链表末尾添加节点的功能。我有两个 typedef 结构:一个用于节点,一个用于双向链表。
在 insertion_last() 中,我在尝试将 list->tail->next 设置为 new_node 时遇到错误。错误是“不允许指向不完整 class 类型的指针”并且指的是 DoublyLinkedList。我想我在制作结构时做错了什么,但不能完全弄清楚为什么它不起作用。
#include <stdio.h>
#include <stdlib.h>
typedef struct NodeStruct
{
int data;
struct Node *next;
struct Node *prev;
} Node;
typedef struct DoublyLinkedListStruct
{
int size;
struct Node *head;
struct Node *tail;
} DoublyLinkedList;
Node* newNode(int data, Node* next, Node* prev)
{
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = next;;
new_node->prev = prev;
return new_node;
};
void insertion_beginning(DoublyLinkedList* list, int new_data)
{
Node* new_node = newNode(new_data, list->head, NULL);
list->head = new_node;
if (!list->tail)
{
list->tail = new_node;
}
list->size++;
}
void insertion_last(DoublyLinkedList* list, int new_data)
{
Node *new_node = newNode(new_data, NULL, list->tail);
if(list->tail)
{
list->tail->next = new_node;
}
else
{
list->head = new_node;
}
list->tail = new_node;
list->size++;
}
您将 tail
和其他几个字段定义为 struct Node *
类型。您没有定义任何此类结构。
您想将它们更改为使用 struct NodeStruct *
。
我正在尝试创建双向链表,其中包含在链表末尾添加节点的功能。我有两个 typedef 结构:一个用于节点,一个用于双向链表。
在 insertion_last() 中,我在尝试将 list->tail->next 设置为 new_node 时遇到错误。错误是“不允许指向不完整 class 类型的指针”并且指的是 DoublyLinkedList。我想我在制作结构时做错了什么,但不能完全弄清楚为什么它不起作用。
#include <stdio.h>
#include <stdlib.h>
typedef struct NodeStruct
{
int data;
struct Node *next;
struct Node *prev;
} Node;
typedef struct DoublyLinkedListStruct
{
int size;
struct Node *head;
struct Node *tail;
} DoublyLinkedList;
Node* newNode(int data, Node* next, Node* prev)
{
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = next;;
new_node->prev = prev;
return new_node;
};
void insertion_beginning(DoublyLinkedList* list, int new_data)
{
Node* new_node = newNode(new_data, list->head, NULL);
list->head = new_node;
if (!list->tail)
{
list->tail = new_node;
}
list->size++;
}
void insertion_last(DoublyLinkedList* list, int new_data)
{
Node *new_node = newNode(new_data, NULL, list->tail);
if(list->tail)
{
list->tail->next = new_node;
}
else
{
list->head = new_node;
}
list->tail = new_node;
list->size++;
}
您将 tail
和其他几个字段定义为 struct Node *
类型。您没有定义任何此类结构。
您想将它们更改为使用 struct NodeStruct *
。