基本上我想要一个链表列表,每个链表都有自己的标题。 这是我的代码:
struct node{
int location;
struct node *next;
struct node *previous;
};
typedef struct ListHeader{
nodeType *first;
nodeType *current;
nodeType *last;
} ListHeader;
struct adjList{
ListHeader *header;
int size;
};
struct List{
adjListType *list;
int size;
};
ListType newList(int numVerts){
ListType new = malloc(sizeof(struct List));
new->list = calloc(numVerts, sizeof(adjListType));
new->size = numVerts;
int i;
for(i = 0; i <= numVerts; i++){
new->list[i] = newAdjList();
}
return new;
}
adjListType newAdjList(void){
adjListType new = malloc(sizeof(struct adjList));
new->header = malloc(sizeof(ListHeader));
new->header->first = NULL;
new->header->current = NULL;
new->header->last = NULL;
new->size = 0;
return new;
}
nodeType newNode(int location){
nodeType new = malloc(sizeof(struct node));
new->location = location;
return new;
}
当我尝试使用此代码移动到链接列表中的下一个节点时,它会出现错误 (ListType l,int location)
l->list[location]->header->current = l->list[location]->header->current->next;
这是我得到的错误:
成员引用基类型'nodeType'(又名'struct node *')不是结构或联合
答案 0 :(得分:1)
如果你想要链表列表,为什么要使用指针?
struct List{
adjListType list[10];
int size;
};
当然你也可以使用Pointer,但是你需要告诉我们如何使用calloc
为它分配数组内存?
根据有问题的更新代码..下面是错误修复行...
ListType newList(int numVerts){
ListType new = malloc(sizeof(struct List));
new->list = calloc(numVerts, sizeof(struct adjListType));//Here you missed struct
new->size = numVerts;
int i;
for(i = 0; i < numVerts; i++){ // Here <= instead of < for 10 length array is 0 to 9
new->list[i] = newAdjList();
}
return new;
}
此外,您可能希望返回&amp; new作为参考,否则您最终会创建不必要的副本...
我要去你的代码,如果我发现了其他任何内容,我会更新这个答案..同时如果你能告诉我们你得到的错误会很好吗?
同样在您显示的代码中,您将next
和prev
以及current
设置为NULL
,但您要更改这些值...否则您将继续获取NULL POINTER EXCEPTION
答案 1 :(得分:0)
创建一个指向struct node
的指针数组。对于一系列链表来说,这应该足够了。
数组的每个元素,即指向struct node
的指针将作为列表的标题,并且可以通过随后从列表中添加/删除元素来维护列表。