【发布时间】:2018-02-07 19:11:46
【问题描述】:
我目前正在尝试将一个结构推送到列表,事情是我必须在不使用标准库的情况下执行此操作(因此没有 malloc 或 calloc 等)。因此我有点挣扎,这就是我到目前为止所得到的。
typedef struct node node_t;
struct node{
int val;
node_t *next;
node_t *prev;
};
node_t nodes[10];
node_t blocked[10];
void init(){
for(int i = 0; i < 10; i++){
nodes[i].val = i;
if(i == 0){
nodes[i].next = &nodes[i+1];
nodes[i].prev = NULL;
}
else if(i == 9){
nodes[i].next = NULL;
nodes[i].prev = &nodes[i-1];
}else{
nodes[i].next = &nodes[i+1];
nodes[i].prev = &nodes[i-1];
}
}
}
node_t *push(node_t **arr, node_t node){
node_t *newhead = &node;
printf("%d\n", newhead->val);
newhead->next = (*arr);
printf("%d\n", (*arr)->val);
return newhead;
}
int main(){
init();
node_t *head = &nodes[0];
node_t *blockhead = &blocked[0];
blockhead = push(&blockhead,nodes[3]);
blockhead = push(&blockhead,nodes[4]);
return 0;
}
我遇到的问题是列表只跟踪我添加到列表中的最后一个元素,如果尝试访问列表中的下一个值,这可能意味着我正在尝试访问 NULL 指针但据我所知,一切似乎都是正确的,但也许我遗漏了一些非常明显的东西?整个“push”函数的要点是简单地将节点添加到列表的前面,然后放在其他所有内容之前。
【问题讨论】:
-
哦,这只是为了测试。
-
在
node_t *newhead = &node;中声明的node在哪里以及它的存储位置在哪里?
标签: c linked-list double-pointer